poj1797
2016-08-18 10:27
399 查看
Problem: Heavy Transportation
Description :给出N个城市M条边,每条边都有个容量,求一条运输路线,使得从城市1到城市N的运输量最大。运输量取决于这条路线上运输量最少的那条路。
Solution :用dijskstra算法对松弛条件变形即可。
Code(C++) (邻接矩阵实现):
Code(C++) (邻接表实现):
Description :给出N个城市M条边,每条边都有个容量,求一条运输路线,使得从城市1到城市N的运输量最大。运输量取决于这条路线上运输量最少的那条路。
Solution :用dijskstra算法对松弛条件变形即可。
Code(C++) (邻接矩阵实现):
#include <iostream> #include <cstring> #define N 1500 #define inf 0x3f3f3f3f using namespace std; int pic ; int visit ; int dis ,n; void dijkstra(int src) { memset(visit,0,sizeof(visit)); for(int i=0; i<n; i++) dis[i]=pic[src][i]; visit[src]=1; for(int i=0; i<n; i++) { int tmp=-inf,k=0; for(int j=0; j<n; j++) if(!visit[j]&&tmp<dis[j]) { tmp=dis[j]; k=j; } visit[k]=1; for(int j=0; j<n; j++) if(!visit[j]&&dis[k]<=pic[k][j]) { int q=dis[k]; if(q>dis[j]) dis[j]=q; } else if(!visit[j]&&dis[k]>pic[k][j]) { int q=pic[k][j]; if(q>dis[j]) dis[j]=q; } } } int main() { int T,m,cnt; int weight,a,b; cin>>T; cnt=1; while(T--) { memset(pic,-inf,sizeof(pic)); cin>>n>>m; while(m--) { cin>>a>>b>>weight; pic[a-1][b-1]=pic[b-1][a-1]=weight; } dijkstra(0); cout<<"Scenario #"<<cnt++<<":"<<endl; cout<<dis[n-1]<<endl<<endl; } return 0; }
Code(C++) (邻接表实现):
#include <iostream> #include <cstring> #define N 1500 #define inf 0x3f3f3f3f using namespace std; int dis ,n; int visit ; int head ,t; struct edge { int u; int v; int cost; int next; } e[N*N]; void addedge(int u,int v,int c) { e[t].u=u; e[t].v=v; e[t].cost=c; e[t].next=head[u]; head[u]=t++; } void dijkstra(int src) { memset(visit,0,sizeof(visit)); memset(dis,-inf,sizeof(dis)); for(int i=head[src];i!=-1;i=e[i].next) dis[e[i].v]=e[i].cost; visit[src]=1; for(int i=1; i<=n; i++) { int tmp=-inf,k=0; for(int j=1; j<=n; j++) if(!visit[j]&&tmp<dis[j]) { tmp=dis[j]; k=j; } visit[k]=1; for(int j=head[k];j!=-1;j=e[j].next) { if(!visit[e[j].v]&&dis[k]>=e[j].cost) { int q=e[j].cost; if(q>dis[e[j].v]) dis[e[j].v]=q; } if(!visit[e[j].v]&&dis[k]<e[j].cost) { int q=dis[k]; if(q>dis[e[j].v]) dis[e[j].v]=q; } } } } int main() { int T,m,cnt=1; int a,b,weight; cin>>T; while(T--) { t=1; memset(head,-1,sizeof(head)); cin>>n>>m; while(m--) { cin>>a>>b>>weight; addedge(a,b,weight); addedge(b,a,weight); } dijkstra(1); cout<<"Scenario #"<<cnt++<<":"<<endl; cout<<dis <<endl<<endl; } return 0; }
相关文章推荐
- POJ 1797 Heavy Transportation
- poj 1797 Heavy Transportation
- POJ 1797 Heavy Transportation
- POJ1797---Heavy Transportation(最小生成树变形求最长路)
- poj 1797 Heavy Transportation
- Poj 2253 + 1797 + 1502 最短路的最小最大值问题
- poj 1797 最短路变形
- POJ - 1797 Heavy Transportation(dijkstra最短路求最大边)
- POJ-1797-Heavy Transportation(草稿)
- POJ 1797 Heavy Transportation 笔记
- POJ - 1797 Heavy Transportation
- POJ 1797 Heavy Transportation Kruskal并查集求解
- poj 1797 Heavy Transportation (spfa 最短路 )
- poj 1797
- poj 1797 Heavy transportation 最短路
- 【POJ】1797 Heavy Transportation 二分+最短路
- poj1797 - Heavy Transportation
- Dijkstra||Prim-POJ-1797-Heavy Transportation
- POJ 1797 Heavy Transportation 最短路变形
- POJ 1797 Heavy Transportation 解题报告