日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

hdu3986 spfa + 枚举最短路上的边

發(fā)布時間:2025/6/17 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3986 spfa + 枚举最短路上的边 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:

? ? ? ? ? ?刪除一條邊后,求最短路中最長的那個(敵人搞破壞).

思路:

? ? ? ? ? ?如果你是敵人你肯定刪除最短路上的邊,刪除別的邊最短路的值是不會變的,所以直接枚舉最短路上的邊去刪除,取得最大的就行了...


#include<stdio.h>
#include<string.h>
#include<queue>


#define N_node 1005
#define N_eage 110000
#define inf 1000000000


using namespace std;


typedef struct
{
int from ,to ,next ,cost;
}STAR;


STAR E[N_eage];
int list[N_node] ,tot;
int mer[N_eage] ,s_x[N_node];


void add(int a ,int b ,int c)
{
E[++tot].from = a;
E[tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
}


void spfa(int s ,int n ,int key)
{
int mark_q[N_node] = {0};
mark_q[s] = 1;
for(int i = 0 ;i <= n ;i ++)
s_x[i] = inf;
s_x[s] = 0;
queue<int>q;
q.push(s);
if(key == -1)
memset(mer ,255 ,sizeof(mer));
while(!q.empty())
{
int xin ,tou;
tou = q.front();
q.pop();
mark_q[tou] = 0;
for(int k = list[tou] ;k ;k = E[k].next)
{
if(k == key) continue;
xin = E[k].to;
if(s_x[xin] > s_x[tou] + E[k].cost)
{
s_x[xin] = s_x[tou] + E[k].cost;
if(key == -1) mer[xin] = k;
if(!mark_q[xin])
{
mark_q[xin] = 1;
q.push(xin);
}
}
}
}
return ;
}


int main ()
{
int t ,i ,n ,m ,a ,b ,c;
scanf("%d" ,&t);
while(t--)
{
scanf("%d%d" ,&n ,&m);
memset(list ,0 ,sizeof(list));
tot = 1;
while(m--)
{
scanf("%d %d %d" ,&a ,&b ,&c);
add(a ,b ,c);
add(b ,a ,c);
}
int ans = -1;
spfa(1 ,n ,-1);
int kg = 0;
for(i = mer[n] ;i + 1 ;i = mer[E[i].from])
{
spfa(1 ,n ,i);
if(s_x[n] == inf)?
{
kg = 1;
break; ? /*********如果有一個邊刪除后不連通了,那么敵人肯定毀滅著一條.
}
if(ans < s_x[n] )
ans = s_x[n];
}
if(kg) ans = -1;
printf("%d\n" ,ans);
}
return 0;
}




































?? ?

總結(jié)

以上是生活随笔為你收集整理的hdu3986 spfa + 枚举最短路上的边的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。