5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100Sample Output
90HintINPUT DETAILS:
Bessie can get home by following trails 4, 3, 2, and 1。
最短路裸题。
#include
#include
#include
#include
#include
using namespace std;
const int maxn=10100,inf=0x7fffffff;
struct node{
int u,v,w,next;
}edge[maxn];
int pre[maxn],dis[maxn],n,e,cnt;
bool vis[maxn];
void init(){
memset(pre,-1,sizeof(pre));
cnt=0;
}
void add(int u,int v,int c){
edge[cnt].u=u;
edge[cnt].w=c;
edge[cnt].v=v;
edge[cnt].next=pre[u];
pre[u]=cnt++;
}
void spfa(int s){
memset(vis,false,sizeof(vis));
for (int i=0;i<=n;i++) dis[i]=inf;
dis[s]=0,vis[s]=1;
queueq;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=false;
for (int i=pre[u]; i!=-1; i=edge[i].next){
int v=edge[i].v,w=edge[i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
}
int main(){
int u,v,w;
while(~scanf("%d%d",&e,&n)){
init();
while(e--){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w),add(v,u,w);
}
spfa(1);
printf("%d\n",dis[n]);
}
return 0;
}