思路:先spfa求出最短路,然後列舉刪除最短路上的邊,每次刪除一條邊,就求一次最短路,然後去最大的那個就行了。。。可以重邊的問題沒考慮完善,wa了好多次啊!!!
1 #include2 #include3 #include4 #include5using
namespace
std;
6const
int maxn=1000+10;7
const
int inf=1
<<30;8
struct
node;
11 vectorvet[maxn];
12int
path[maxn];
13int
dist[maxn];
14bool
visited[maxn];
15bool mark[maxn*50
];16
intid[maxn];
17int
n,m;
18bool
tag;
1920
void spfa(int
u)42}43
}44}45
}464748
intmain()
67 tag=true
;68 spfa(1
);69 tag=false;70
if(dist[n]==inf)
74int ans=0;75
bool flag=true;76
for(int u=n;u!=-1;u=path[u])
86 ans=max(ans,dist[n]);87}
88if
(flag)91}
92return0;
93 }
HDU 3986 去掉一條邊 使最短路最大
一直沒想到怎麼做因為複雜度標程也是卡過去的估計 如果按照一條直線出資料的話那就是 20 5e4 1000 5e4 1000 2 log 5e4 很明顯爆掉了。但是事實就是只要遍歷最短路的就完事了 include include include include define x first defin...
hdu3986 spfa 列舉最短路上的邊
題意 刪除一條邊後,求最短路中最長的那個 敵人搞破壞 思路 如果你是敵人你肯定刪除最短路上的邊,刪除別的邊最短路的值是不會變的,所以直接列舉最短路上的邊去刪除,取得最大的就行了.include include include define n node 1005 define n eage 1100...
hdu 2363 最短路 列舉)
思路 和之前hdu上做過的一題很像。就是先求求出所有的高度差,排序後列舉,每次都一次spfa,求出dist,若dist n inf,說明是在最小高度差下找到了最短路徑,直接break即可。另外,發現若不用visited標記的話,時間是其兩倍。orz.以後還是老老實實加visited 吧。1 incl...