題意:
刪除一條邊後,求最短路中最長的那個(敵人搞破壞).
思路:如果你是敵人你肯定刪除最短路上的邊,刪除別的邊最短路的值是不會變的,所以直接列舉最短路上的邊去刪除,取得最大的就行了...
#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...