poj1797&poj2263 dijkstra()贪心解瓶颈路问题2

来源:互联网 发布:美辰堂燕窝是假货 知乎 编辑:程序博客网 时间:2024/05/19 09:15

poj1797

题意:输入样例个数t,给出城镇个数n,公路条数m,输入m条路线。路线格式:城镇1-城镇2-公路承载量;

解法:有了瓶颈路1的思路,这一题也同样可以解决,这个求的是   所有最小权值中的最大值。

通时也找了一道类似的题目,poj2263。


//poj1797
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,map[1005][1005],vis[1005],dis[1005];int main(){int t,ca=1;cin>>t;while(t--){int a,c,b;cin>>n>>m;memset(vis,0,sizeof(vis));for(int i=0;i<=n;++i){for(int j=0;j<=n;++j){map[i][j]=-2;}map[i][i]=0;}for(int i=0;i<m;++i){scanf("%d%d%d",&a,&b,&c);map[a][b]=map[b][a]=c;}for(int i=1;i<=n;++i){dis[i]=map[1][i];}vis[1]=1;int u,x=1;for(int i=0;i<n-1;++i){int mins=-1;for(int j=1;j<=n;++j){if(!vis[j]&&dis[j]>mins){u=j;mins=dis[j];}}vis[u]=1;for(int j=1;j<=n;++j){int tmp=min(dis[u],map[u][j]);if(dis[j]<tmp)dis[j]=tmp;}}printf("Scenario #%d:\n%d\n\n",ca++,dis[n]);} }
//poj2263
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<string>using namespace std;int n,m,map[220][220],dis[220],vis[220];int  dijkstra(int s,int d){memset(vis,0,sizeof(vis));for(int i=0;i<n;++i)dis[i]=map[s][i];vis[s]=1;int u;for(int i=0;i<n-1;++i){int mins=-1;for(int j=0;j<n;++j){if(!vis[j]&&dis[j]>mins){u=j;mins=dis[j];}}vis[u]=1;for(int j=0;j<n;++j){int tmp=min(dis[u],map[u][j]);if(dis[j]<tmp)dis[j]=tmp;}}return dis[d];}int main(){int ca=1;string a,b;int a1,b1,c;while(cin>>n>>m&&(n||m)){    for(int i=0;i<n;++i){for(int j=0;j<n;++j)map[i][j]=-2;}int k=0,i,j;string z[220];cin>>a>>b>>c;if(a==b)z[k++]=a;else{z[k++]=a;z[k++]=b;map[0][1]=map[1][0]=c;//cout<<z[0]<<" "<<z[1]<<endl;}for(i=1;i<m;++i){cin>>a>>b>>c;if(a==b)continue;for(j=0;j<k;++j)if(a==z[j]){a1=j;break;}if(j==k){    z[k++]=a;    a1=j;    }for(j=0;j<k;++j)if(b==z[j]){b1=j;break;}if(j==k){     z[k++]=b;     b1=j;    }map[a1][b1]=map[b1][a1]=c;}//for(int i=0;i<k;++i)//cout<<i<<' '<<z[i]<<endl;cin>>a>>b;for(i=0;i<k;++i){if(a==z[i])a1=i;if(b==z[i])b1=i;}printf("Scenario #%d\n%d tons\n\n",ca++,dijkstra(a1,b1));} }



0 0
原创粉丝点击