hdu3986 spfa 列舉最短路上的邊

2021-06-20 17:22:23 字數 991 閱讀 4678

題意:

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

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

#include

#include

#include

#define n_node 1005

#define n_eage 110000

#define inf 1000000000

using namespace std;

typedef struct

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)

void spfa(int s ,int n ,int key)

;mark_q[s] = 1;

for(int i = 0 ;i <= n ;i ++)

s_x[i] = inf;

s_x[s] = 0;

queueq;

q.push(s);

if(key == -1)

memset(mer ,255 ,sizeof(mer));

while(!q.empty())}}

}return ;

}int main ()

int ans = -1;

spfa(1 ,n ,-1);

int kg = 0;

for(i = mer[n] ;i + 1 ;i = mer[e[i].from])

if(ans < s_x[n] )

ans = s_x[n];

}if(kg) ans = -1;

printf("%d\n" ,ans);

}return 0;

}

hdu 3986 最短路 列舉)

思路 先spfa求出最短路,然後列舉刪除最短路上的邊,每次刪除一條邊,就求一次最短路,然後去最大的那個就行了。可以重邊的問題沒考慮完善,wa了好多次啊!1 include2 include3 include4 include5 using namespace std 6const int maxn ...

HDU 3790 最短路徑 spfa

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,...

hdu 2363 最短路 列舉)

思路 和之前hdu上做過的一題很像。就是先求求出所有的高度差,排序後列舉,每次都一次spfa,求出dist,若dist n inf,說明是在最小高度差下找到了最短路徑,直接break即可。另外,發現若不用visited標記的話,時間是其兩倍。orz.以後還是老老實實加visited 吧。1 incl...