csu1307 最短路 二分

2021-06-18 04:36:43 字數 1526 閱讀 4349

time limit: 1 sec  

memory limit: 128 mb

submit: 392  

solved: 68 [

submit][

status][

web board]

alice想要從城市a出發到城市b,由於alice最近比較窮(不像集訓隊陳興老師是個rich second),所以只能選擇做火車從a到b。不過alice很討厭坐火車,火車上人比較多,比較擁擠,所以alice有很嚴格的要求:火車的相鄰兩站間的最大距離盡可能的短,這樣alice就可以在停站的時候下車休息一下。當然alice希望整個旅途比較短。

有多組測試資料。

每組測試資料的第一行有兩個整數n,m,a,b(n<=2000, m<=50000, n >=2, a,b<=n),其中n是城市的個數,m是城市間通火車的個數。

a,b是alice起始的城市與目的地城市,城市的標號從1開始。

接下來的m行每行三個整數u,v,w表示從u到v和從v到u有一條鐵路,距離為w, u,v<=n, w<=10000。

對於每組測試資料輸出滿足alice要求的從a到b的最短距離。

3 3 1 2

1 2 80

1 3 40

2 3 50

3 3 1 2

1 2 90

1 3 10

2 3 20

4 5 1 4

1 2 8

1 4 9

1 3 10

2 4 7

3 4 8

90

3015

#include#include#include#include#include#include#define inf 100000000

using namespace std;

const int maxn=2005;

const int maxm=50010;

int maxm,n;

int head[maxn],vis[maxn],dis[maxn];

struct seg

edge[maxm];

void addedge(int u,int v,int w)

int spfa(int a,int b,int k)}}

} }return dis[b]==inf?0:dis[b];

}int main()

// for(int i=head[1];i!=-1;i=edge[i].next)printf("1 %d %d\n",edge[i].v,edge[i].w);

int l=0,r=10001,mid;

while(1+l>1;

if(spfa(a,b,mid)) r=mid;

else l=mid;

// printf("%d %d\n",mid,dis[b]);

} printf("%d\n",spfa(a,b,r));

} return 0;

}

二分 最短路 dijkstra

洛谷p1462 通往奧格瑞瑪的道路 對於我這個只是聽過二分但是從來沒有寫過二分的人來說,看到這個題目時是懵逼的,啥是求最多一次收費的最小值,只能回頭開始學習二分,在一下幾種情況下,均可以用二分來解決。1.從有序陣列中查詢某個值。2.假定乙個解並判斷是否可行 3.最大化最小值 4.最大化平均值 這個題...

bzoj 1614 二分 最短路

題意 找一條將1號和n號 線桿連起來的路徑,其餘的 線桿並不一定要連入 網路。電信公司最終同意免費為fj鏈結k對由fj指定的 線桿。對於此外的那些 線,要求最大邊最小 明顯的二分答案,因為只要求1號和n號連起來,其他點不要求,所以跑最短路即可 對於二分出mid,我們check時,找到1號到n號的最短...

NightMare2 (二分 最短路)

time limit 5000 ms memory limit 65536 k 可憐的runningphoton又做噩夢了。但是這次跟上次不大一樣,雖然他又被困在迷宮裡,又被裝上了乙個定時炸彈,但是值得高興的是,他發現他身邊有數不清的財寶,所以他如果能帶著這些財寶並活著逃出去的話,他就發財啦。不過,...