标签:style 一个人 empty tom 纽约 font 超级 时间 看电影
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 47965 Accepted Submission(s): 15913
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define INF 999999999 using namespace std; struct Node{ int s,t,c; }edge[200000]; int T,S,D; int next1[200000],head[20000]; int d[20000],vis[20000]; int a[20000]; int cnt; void spfa() { for(int i=0;i<20000;i++) {vis[i]=0;d[i]=INF;} vis[0]=1;d[0]=0; queue<int> q; q.push(0); while(!q.empty()) { int v=q.front(); q.pop();vis[v]=0; int k=head[v]; while(k!=-1) { int b=edge[k].t; if(d[b]>d[v]+edge[k].c) { d[b]=d[v]+edge[k].c; if(!vis[b]) { vis[b]=1; q.push(b); } } k=next1[k]; } } } void Add(int a,int b,int c) { edge[cnt].s=a;edge[cnt].t=b; edge[cnt].c=c; next1[cnt]=head[edge[cnt].s]; head[edge[cnt].s]=cnt; cnt++; } int main() { while(scanf("%d%d%d",&T,&S,&D)!=-1) { memset(head,-1,sizeof(head)); memset(vis,0,sizeof(vis)); cnt=1; for(int i=1;i<=T;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); Add(a,b,c); Add(b,a,c); } for(int i=1;i<=S;i++) { int x; scanf("%d",&x); Add(0,x,0); } for(int i=1;i<=D;i++) scanf("%d",&a[i]); spfa(); int ans=INF; for(int i=1;i<=D;i++) ans=min(ans,d[a[i]]); printf("%d\n",ans); } return 0; }
标签:style 一个人 empty tom 纽约 font 超级 时间 看电影
原文地址:https://www.cnblogs.com/ACRykl/p/9104126.html