NYOJ 115 城市平乱 【无向图 + 链式前向星 + SPFA】
来源:互联网 发布:php重载 编辑:程序博客网 时间:2024/06/01 10:27
城市平乱
时间限制:1000 ms | 内存限制:65535 KB
难度:4
- 描述
南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。
他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。
现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。
现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。
注意,两个城市之间可能不只一条路。
- 输入
- 第一行输入一个整数T,表示测试数据的组数。(T<20)
每组测试数据的第一行是四个整数N,M,P,Q(1<=N<=100,N<=M<=1000,M-1<=P<=100000)其中N表示部队数,M表示城市数,P表示城市之间的路的条数,Q表示发生暴乱的城市编号。
随后的一行是N个整数,表示部队所在城市的编号。
再之后的P行,每行有三个正整数,a,b,t(1<=a,b<=M,1<=t<=100),表示a,b之间的路如果行军需要用时为t
数据保证暴乱的城市是可达的。 - 输出
- 对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
- 样例输入
13 8 9 81 2 31 2 12 3 21 4 22 5 33 6 24 7 15 7 35 8 26 8 2
- 样例输出
4
/*
用链式前向星建无向图,SPFA求各顶点间的距离。
*/#include<cstdio>#include<cstring>#include<queue>#define inf 0x3f3f3f3fusing namespace std;const int maxn=1010;const int maxm=100002;int n,cnt,head[maxn],dis[maxn],vis[maxn],city[maxn];struct node{ int to,w,next;}edge[maxm];void init(){ memset(head,-1,sizeof(head)); cnt=0; }void addedge(int i,int j,int w){ edge[cnt].to=j; edge[cnt].w=w; edge[cnt].next=head[i]; head[i]=cnt++;} void spfa(int s){ for(int i=1; i<=n; i++){ dis[i]=inf; vis[i]=0; } dis[s]=0,vis[s]=1; queue<int>q; q.push(s); while(!q.empty()){ int x=q.front(); q.pop(); vis[x]=0; for(int k=head[x]; k!=-1; k=edge[k].next){ int t=edge[k].to; if(dis[t]>dis[x]+edge[k].w){ dis[t]=dis[x]+edge[k].w; if(!vis[t]){ vis[t]=1; q.push(t); } } } }}int main(){ int T,m,p,q,a,b,t,i,ans; scanf("%d",&T); while(T--){ scanf("%d %d %d %d",&p,&n,&m,&q);//这里p是部队数,n是城市数,m是边数,q是发生暴动的城市 init(); for(i=0; i<p; i++){ scanf("%d",&city[i]); } while(m--){ scanf("%d %d %d",&a,&b,&t); addedge(a,b,t); addedge(b,a,t); } spfa(q); for(i=0,ans=inf; i<p; i++){ if(ans>dis[city[i]]) ans=dis[city[i]]; } printf("%d\n",ans); } return 0;}
0 0
- NYOJ 115 城市平乱 【无向图 + 链式前向星 + SPFA】
- 链式前向星+SPFA
- spfa+链式前向星
- SPFA+链式前向星
- NYOJ-115 城市平乱 SPFA
- nyoj 115 城市平乱(spfa)
- POJ3259(链式前向星+spfa)
- POJ 1511 链式前向星+SPFA
- -----模板spfa+邻接表,spfa+链式前向星
- poj1515Street Directions【无向图->有向图 链式前向星版tarjan求桥】
- 链式前向星
- 链式前向星
- 链式前向星
- 链式前向星
- 链式前向星
- 链式前向星
- 链式前向星
- 链式前向星
- mac搭建svn服务器
- 我的Python爬虫(三):数据的实时监控
- mac搭建svn服务器
- ubuntu14.10下adt bundle安装svn一个可运行的方式
- svn
- NYOJ 115 城市平乱 【无向图 + 链式前向星 + SPFA】
- 《匆匆那年》每一集的标题
- 【android】一套完善的Android异步任务类
- 什么ARP和ARP欺骗
- Android下Speex库除0错误(SIGFPE)排除
- const c++
- struts1 End of Life 公告
- 关于JavaScript函数调用其他函数的笔记
- Populating Next Right Pointers in Each Node