//不知道切过这道题目几次了,这次又wa了...双向路啊。。。。这波简直无奈了,今晚又是浪成狗!!!!
#include<cstdio> #include<vector> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define INF 0X3f3f3f3f #define N 100010 struct asd{ int to; int w; int next; }; int head[N]; int tol; asd q[N]; int dis[220]; bool vis[220]; int n; int que[N*10]; void spfa(int s,int t) { for(int i=0;i<n;i++) { dis[i]=INF; vis[i]=0; } dis[s]=0; vis[s]=1; int he,tail; he=0;tail=1; que[he]=s; while(he<tail) { int u=que[he]; vis[u]=0; for(int k=head[u];k!=-1;k=q[k].next) { int i=q[k].to; if(dis[i]>dis[u]+q[k].w) { dis[i]=dis[u]+q[k].w; if(!vis[i]) { que[tail++]=i; vis[i]=1; } } } he++; } if(dis[t]!=INF) { printf("%d ",dis[t]); } else puts("-1"); } void add(int a,int b,int c) { q[tol].to=b; q[tol].w=c; q[tol].next=head[a]; head[a]=tol++; } int main() { int m; while(~scanf("%d%d",&n,&m)) { int a,b,c; memset(head,-1,sizeof(head)); tol=0; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } int s,t; scanf("%d%d",&s,&t); spfa(s,t); } return 0; }