基础最短路三 POJ 1797

 

POJ 1797 :http://poj.org/problem?id=1797

 

这题和 基础最短路二 的POJ2253 其实是差不多的

n 为1000

题意:从点1到点n,之间的  最小边 最大为多少。

 

和POJ 1797 的反一下就好了。但是要更新起来要考虑一下小细节。代码里有注释位置。

 

结尾要多换一行!!!!

 

Spfa真好用,上瘾了,还好记:

 
 
#include"cstdio" #include"iostream" #include"cstring" #include"algorithm" #include"vector" #include"cmath" #include"queue" using namespace std; #define INF 1000009 #define inf 1009 #define loop(x,y,z) for(x=y;x<z;x++) #define ll long long int n,m,s,g; int book[inf]; int dis[inf]; queue<int>q; struct node { int to,w; node(int i,int j) { to=i; w=j; } }; vector<node>edge[inf]; void init() { int i; loop(i,1,n+1) edge[i].clear(); loop(i,1,n+1) dis[i]=INF; dis[s]=INF; memset(book,0,sizeof book); while(!q.empty())q.pop(); } void Spfa() { q.push(s); book[s]=1; int i; while(!q.empty()) { int u=q.front(); q.pop(); book[u]=0; int len=edge[u].size(); loop(i,0,len) { node& e=edge[u][i]; int gank=min(dis[u],e.w); if(dis[e.to]==INF||dis[e.to]<gank) //虽然和上题反了一下,但是处理要考虑一下INF情况 { dis[e.to]=gank; if(!book[e.to]) { q.push(e.to); book[e.to]=1; } } } } } int main() { int i,j,k,o; int T; scanf("%d",&T); loop(o,1,T+1) { scanf("%d%d",&n,&m); s=1;g=n; init(); while(m--) { scanf("%d%d%d",&i,&j,&k); edge[i].push_back(node(j,k)); edge[j].push_back(node(i,k)); } Spfa(); printf("Scenario #%d:\n",o); printf("%d\n\n",dis[g]); } return 0; } 

 

 

 

 

 

 
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值