首页 > 代码库 > CodeForces 20C
CodeForces 20C
这题有一点坑,用d[N]int的话会上溢 所以要用long long
1 #include <iostream> 2 #include <string.h> 3 #include <queue> 4 #include <vector> 5 #include <utility> 6 #include <cstdio> 7 using namespace std; 8 #define N 100005 9 #define M 40000510 typedef long long LL;11 const LL inf = 1<<62;12 LL v[M],w[M],next[M],first[N],d[N],e;13 int f[N],o[N];14 bool inq[N];15 void addedge(int a,int b,int x){16 v[e]=b;17 w[e]=x;18 next[e]=first[a];19 first[a]=e++;20 }21 void SPFA(int st){22 queue<int> q;23 d[st]=0;24 q.push(st);25 inq[st]=1;26 f[1]=-1;27 while(!q.empty()){28 int u = q.front();29 q.pop();30 inq[u] = 0;31 for(int i=first[u];i!=-1;i=next[i]){32 if(d[v[i]]>d[u]+w[i]){33 d[v[i]]=d[u]+w[i];34 f[v[i]]=u;35 if(!inq[v[i]]){36 q.push(v[i]);37 inq[v[i]]=1;38 }39 }40 }41 }42 }43 int main(){44 int n,m,a,b,x;45 // freopen("test.txt","r",stdin);46 while(cin>>n>>m){47 e=0;48 for(int i=0;i<=n;i++){49 first[i]=-1;50 inq[i]=false;51 d[i]=inf;52 }53 for(int i=0;i<m;i++){54 cin>>a>>b>>x;55 addedge(a,b,x);56 addedge(b,a,x);57 }58 SPFA(1);59 if(d[n]==inf)cout<<"-1"<<endl;60 else {61 int r=0;62 for(int i=f[n];i!=-1;i=f[i]){63 o[r]=i;64 r++;65 }66 for(int i=r;i>0;i--){67 printf("%d ",o[i-1]);68 }69 printf("%d\n",n);70 }71 }72 return 0;73 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。