标签:
Time Limit: 3000MS | Memory Limit: 30000K | |
Total Submissions: 26968 | Accepted: 7232 |
Description
Input
Output
The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Then print a single line containing the maximum allowed weight that Hugo can transport to the customer. Terminate the output for the scenario with a blank line.
Sample Input
1 3 3 1 2 3 1 3 4 2 3 5
Sample Output
Scenario #1: 4
题目大意,有n个城m条边,每个边有个最大的通过量,求1城市到n城市的一条最大通路容量是多少
迪杰斯特拉算法的变形,松弛条件改为道路容量为道路上容量最小的边,然后在选容量最大的路
ac代码如下:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<memory.h> 5 using namespace std; 6 long map[1100][1100]; 7 long dp[1100],n; 8 bool v[1100]; 9 void dij(int ii){ 10 for(int i=1;i<=n;i++){ 11 dp[i]=map[ii][i]; 12 } 13 dp[ii]=1000000;v[ii]=1; 14 int T=n; 15 while(T--){ 16 int k=-1,s; 17 for(int i=1;i<=n;i++){//找下一条边 18 if(dp[i]>k&&!v[i]){ 19 k=dp[i]; 20 s=i; 21 } 22 } 23 v[s]=1; 24 if(s==n)return; 25 for(int i=1;i<=n;i++){//利用下一条边进行松弛 26 if(!v[i]&&dp[i]<min(dp[s],map[s][i])){ 27 dp[i]=min(dp[s],map[s][i]); 28 } 29 } 30 } 31 } 32 int main(){ 33 long T,m,s,e,c,ca=1; 34 cin>>T; 35 while(T--){ 36 cin>>n>>m; 37 memset(v,0,sizeof(v)); 38 memset(dp,0,sizeof(dp)); 39 memset(map,0,sizeof(map)); 40 for(int i=1;i<=m;i++){ 41 cin>>s>>e>>c; 42 map[s][e]=map[e][s]=max(map[s][e],c); 43 } 44 dij(1); 45 cout<<"Scenario #"<<ca++<<":"<<endl; 46 cout<<dp[n]<<endl<<endl; 47 } 48 return 0; 49 }
提交结果:
标签:
原文地址:http://www.cnblogs.com/yifan2016/p/5262908.html