六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 26|回复: 0

poj3255——Roadblocks

[复制链接]

升级  93.8%

309

主题

309

主题

309

主题

进士

Rank: 4

积分
969
 楼主| 发表于 2013-1-26 13:37:38 | 显示全部楼层 |阅读模式
求次短路,直接套的模板。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define maxcost 99999999int n,r;class node{public:int v,len,next;};node g[110006*2];int head[5005];int cnt;void add(int a,int b,int c){g[++cnt].v =b;g[cnt].len =c;g[cnt].next =head[a];head[a]=cnt;}int dist[5005][2],vis[5005][2];int dij(int s,int f){int i,j,k,x,y,dis,min;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++)dist[i][0]=dist[i][1]=maxcost;dist[s][0]=0;for(i=1;i<=2*n;i++){min=maxcost;for(j=1;j<=n;j++){if(!vis[j][0]&&min>dist[j][0]){x=j;y=0;min=dist[j][0];}else if(!vis[j][1]&&min>dist[j][1]){x=j;y=1;min=dist[j][1];}}if(min==maxcost) break;vis[x][y]=1;for(j=head[x];j;j=g[j].next ){dis=min+g[j].len;if(dis<dist[g[j].v ][0]){dist[g[j].v ][1]=dist[g[j].v ][0];dist[g[j].v ][0]=dis;}else if(dis<dist[g[j].v ][1]){dist[g[j].v ][1]=dis;}}}return dist[f][1];}int main(){int a,b,c;cin>>n>>r;cnt=0;for(int i=0;i<r;i++){cin>>a>>b>>c;add(a,b,c);add(b,a,c);}cout<<dij(1,n)<<endl;return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表