NYOJ 115 城市平乱
2014-07-19 21:13
232 查看
[b]城市平乱[/b]
时间限制:1000ms|内存限制:65535KB难度:4
[b]描述[/b]
南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。
他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。
现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。
现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<vector> #include<queue> #include<climits> usingnamespacestd; constintINF=INT_MAX>>2; structarc{ intto,w; }; vector<arc>e[1005]; intn,m,p,q,b[105]; boolused[1005]; intd[1005]; voidspfa(intsrc){ inti,j,temp; memset(used,false,sizeof(used)); queue<int>qu; for(i=0;i<=m;i++)d[i]=INF; d[src]=0; used[src]=true; qu.push(src); while(!qu.empty()){ temp=qu.front(); used[temp]=false; qu.pop(); for(i=0;i<e[temp].size();i++){ j=e[temp][i].to; if(d[j]>d[temp]+e[temp][i].w){ d[j]=d[temp]+e[temp][i].w; if(!used[j]){ used[j]=true; qu.push(j); } } } } } intmain(){ intks,i,j,u,v,w; scanf("%d",&ks); while(ks--){ scanf("%d%d%d%d",&n,&m,&p,&q); for(i=0;i<1005;i++) e[i].clear(); for(i=0;i<n;i++) scanf("%d",b+i); for(i=0;i<p;i++){ scanf("%d%d%d",&u,&v,&w); e[u].push_back((arc){v,w}); e[v].push_back((arc){u,w}); } spfa(q); intans=d[b[0]]; for(i=1;i<n;i++) if(ans>d[b[i]])ans=d[b[i]]; printf("%d\n",ans); } return0; }
ViewCode
相关文章推荐
- nyoj 115 城市平乱
- NYOJ115 城市平乱
- NYOJ 115 城市平乱
- nyoj 115 城市平乱
- NYOJ-115城市平乱(图论入门题)
- NYOJ115 城市平乱
- nyoj-115-城市平乱
- NYOJ 115城市平乱 【dijkstra】
- NYOJ 115 城市平乱 (Dijkatra)
- nyoj--115--城市平乱(最短路 反向)
- 终点节点NYOJ115 城市平乱终点节点
- nyoj115(城市平乱)(dijkstra算法)
- NYOJ-115 城市平乱
- nyoj 115 城市平乱 dijkstra最短路
- NYOJ-115 城市平乱
- nyoj 115 城市平乱
- NYOJ115_城市平乱
- nyoj 115 城市平乱 dijkstra最短路
- NYOJ 115 城市平乱【Dijkstra】
- nyoj 115 城市平乱