首页 > 代码库 > POJ 1797 Heavy Transportation
POJ 1797 Heavy Transportation
类似于我上一篇解题报告。POJ 2253 Frogger。
也是最短路的变形,也可以当成生成树做。
2253 是求跳的路径中 权值最小的那一条。
而这道题1797 是求路径中 权值最大的那一条。
只需要把2253 中的dis[]初始赋INF,其他赋为0。然后dis[v]<min(dis[u],d)。
d是某一边的大小。u出发点,v是到达点。
程序基本和 2253 一样。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<queue> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<cmath> #define INF 0x7fffffff #define eps 1e-6 using namespace std; int n,m; struct lx { int v,d; }; vector<lx> g[1001]; void SPFA(int start) { int dis[1001]; bool vis[1001]; for(int i=1;i<=n;i++) dis[i]=0,vis[i]=0; queue<int>q; dis[start]=INF,vis[start]=1; q.push(start); while(!q.empty()) { int u=q.front();q.pop(); vis[u]=0; for(int j=0;j<g[u].size();j++) { int v=g[u][j].v; int d=g[u][j].d; if(dis[v]<min(dis[u],d)) { dis[v]=min(dis[u],d); if(!vis[v]) { vis[v]=1; q.push(v); } } } } printf("%d\n\n",dis[n]); } int main() { int t; scanf("%d",&t); for(int cot=1;cot<=t;cot++) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) g[i].clear(); while(m--) { int u,v,d; scanf("%d%d%d",&u,&v,&d); lx now; now.d=d; now.v=v;g[u].push_back(now); now.v=u;g[v].push_back(now); } printf("Scenario #%d:\n",cot); SPFA(1); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。