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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P1401 城市(30分,正解网络流)

發(fā)布時(shí)間:2023/11/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1401 城市(30分,正解网络流) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

N(2<=n<=200)個(gè)城市,M(1<=m<=40000)條無向邊,你要找T(1<=T<=200)條從城市1到城市N的路,使得最長(zhǎng)的邊的長(zhǎng)度最小,邊不能重復(fù)用。

輸入輸出格式

輸入格式:

?

第1行三個(gè)整數(shù)N,M,T用空格隔開。

第2行到P+1行,每行包括三個(gè)整數(shù)Ai,Bi,Li表示城市Ai到城市Bi之間有一條長(zhǎng)度為L(zhǎng)i的道路。

?

輸出格式:

?

輸出只有一行,包含一個(gè)整數(shù),即經(jīng)過的這些道路中最長(zhǎng)的路的最小長(zhǎng)度。

?

輸入輸出樣例

輸入樣例#1:
7 9 2 1 2 2 2 3 5 3 7 5 1 4 1 4 3 1 4 5 7 5 7 1 1 6 3 6 7 3 輸出樣例#1:
5

正解是網(wǎng)絡(luò)流。。。
所以就比較尷尬了。。
但是二分答案還是寫出來了
等我哪天會(huì)了網(wǎng)絡(luò)流一定回來A了這題。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 using namespace std; 7 const int MAXN=40001; 8 void read(int & n) 9 { 10 char c='+';int x=0;bool flag=0; 11 while(c<'0'||c>'9') 12 {c=getchar();if(c=='-')flag=1;} 13 while(c>='0'&&c<='9') 14 {x=x*10+(c-48);c=getchar();} 15 flag==1?n=-x:n=x; 16 } 17 int n,m,t; 18 struct node 19 { 20 int u,v,w,nxt,use; 21 }edge[MAXN]; 22 int head[MAXN]; 23 int num=1; 24 void add_edge(int x,int y,int z) 25 { 26 edge[num].u=x; 27 edge[num].v=y; 28 edge[num].w=z; 29 edge[num].nxt=head[x]; 30 head[x]=num++; 31 } 32 int maxl=-1,minl=0x7fff; 33 int vis[MAXN]; 34 int map[201][201]; 35 int have[201][201]; 36 int bfs(int need) 37 { 38 queue<int>q; 39 q.push(1); 40 while(q.size()!=0) 41 { 42 int p=q.front(); 43 q.pop(); 44 for(int i=head[p];i!=-1;i=edge[i].nxt) 45 { 46 if(edge[i].w<=need&&have[edge[i].u][edge[i].v]==0) 47 { 48 have[edge[i].u][edge[i].v]=1; 49 have[edge[i].v][edge[i].u]=1; 50 if(edge[i].v!=n) 51 q.push(edge[i].v); 52 vis[edge[i].v]++; 53 } 54 } 55 } 56 if(vis[n]>=t) 57 return 1; 58 else 59 return 0; 60 61 } 62 int pd(int p) 63 { 64 memset(vis,0,sizeof(vis)); 65 memset(have,0,sizeof(have)); 66 if(bfs(p)) 67 return 1; 68 else 69 return 0; 70 } 71 int main() 72 { 73 read(n);read(m);read(t); 74 for(int i=1;i<=n;i++) 75 head[i]=-1; 76 for(int i=1;i<=m;i++) 77 { 78 int x,y,z; 79 read(x);read(y);read(z); 80 add_edge(x,y,z); 81 add_edge(y,x,z); 82 maxl=max(maxl,z); 83 minl=min(minl,z); 84 } 85 int l=minl,r=maxl; 86 while(l<r) 87 { 88 int mid=(l+r)>>1; 89 if(pd(mid)) 90 r=mid; 91 else l++; 92 } 93 printf("%d",l); 94 return 0; 95 }

?



創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的P1401 城市(30分,正解网络流)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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