城市平乱

时间限制: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

数据保证暴乱的城市是可达的。

输出
对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
样例输入
1
3 8 9 8
1 2 3
1 2 1
2 3 2
1 4 2
2 5 3
3 6 2
4 7 1
5 7 3
5 8 2
6 8 2 
样例输出
4
来源
《世界大学生程序设计竞赛高级教程·第一册》改编

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define inf 0xfffff
 4
 5 int g[1002][1002];
 6 int lowcost[1000001],used[1000001];
 7
 8 void dijskra(int n,int a)
 9 {
10     int i,j,k,min;
11     memset(used,0,sizeof(used));
12     memset(lowcost,0,sizeof(lowcost));
13     for(i=1;i<=n;i++)
14     lowcost[i]=g[i][a];
15     used[a]=1;
16     for(i=1;i<n;i++)
17     {
18         j=a;
19         min=inf;
20         for(k=1;k<=n;k++)
21         {
22             if(lowcost[k]<min&&!used[k])
23             {
24             min=lowcost[k];
25             j=k;
26             }
27         }
28         used[j]=1;
29         for(k=1;k<=n;k++)
30         {
31             if(lowcost[j]+g[k][j]<lowcost[k]&&!used[k])
32             lowcost[k]=lowcost[j]+g[k][j],
33             g[k][a]=g[a][k]=lowcost[k];
34         }
35     }
36 }
37
38 int main()
39 {
40     int n,m,p,q,i,j,t;
41     int army;
42     scanf("%d",&t);
43     while(t--)
44     {
45     scanf("%d%d%d%d",&n,&m,&p,&q);
46     for(i=1;i<=m+1;i++)
47     {
48         for(j=1;j<=m+1;j++)
49         {
50             g[i][j]=inf;
51         }
52         g[i][i]=0;
53     }
54     for(i=0;i<n;i++)
55     {
56         scanf("%d",&army);
57         g[army][m+1]=g[m+1][army]=0;
58     }
59     for(i=0;i<p;i++)
60     {
61         int a,b,t;
62         scanf("%d%d%d",&a,&b,&t);
63         g[a][b]=g[b][a]=t;
64     }
65     dijskra(m+1,m+1);
66     printf("%d\n",g[q][m+1]);
67     }
68 }

View Code

南洋理工 OJ 115 城市平乱 dijstra算法相关推荐

  1. NYOJ 115 城市平乱(图论Dijkstra)

    城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别 ...

  2. NYOJ 115 城市平乱

    城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别 ...

  3. NYOJ 115 城市平乱

    描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都 ...

  4. 图论南阳155题 城市平乱

    思路:刚开始用了佛洛伊德算法,没想到超时了.后来改用多次迪杰斯特算法就过了. 迪杰斯特算法是求出源点到其余点的最短距离 这里是求出队伍到危险去的距离然后找出最小的那个然后输出就ok了,注意他说两个城市 ...

  5. 城市平乱 (dijkstra模板题)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=115 本题求单源最短路,这里有个技巧,因为源点不一,这时我们可以设置一个"超级源 ...

  6. 哈理工OJ 1923 纸牌游戏(贪心算法)

    题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1923 [思路分析]tom ...

  7. C. 啊对对对 (南阳理工oj—21第二次招新赛)

    解法 找到最长的公共前后缀以后,我们可以先输出t,然后t中的最长公共前后缀无需再输出(重复),只输出不重复的部分即可. 比如 aba公共前后缀为a ,不重复的部分为ba,所以你只需要先输出t(aba) ...

  8. 南洋理工 55 懒省事的小明

    懒省事的小明 时间限制:3000 ms  |           内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同 ...

  9. 前端剑法第五式————平乱

    清溪牧者宿云田,忽梦村林鸡鸣起, 佳影轩窗,心思潸然起 马嘶人吼惊怒起,何人? 一剑平乱四下寂 纵马疾行,少年意气志天涯 今日学习内容 目录 文档流(normal flow) 盒子模型 1:内容区(c ...

  10. hrbust 哈理工oj 1418 夏夜星空【带权并查集】

    夏夜星空 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 43(20 users) Total Accepted: 19(18 user ...

最新文章

  1. js 函数调用顺序研究
  2. Nginx 静态文件 location 指定
  3. stm32 TIM2 重映射
  4. 刘强东:猪飞到天疯狂了十几秒 但摔下死得更快
  5. cloudera manager 及CDH卸载
  6. Java ObjectStreamField getOffset()方法与示例
  7. gevent模块的使用
  8. oj运行时错误_FME服务器链接运行时错误(由于缺少适当的权限,用户未授权的请求)...
  9. 多个线程“打架抢夺”同一个资源,该如何让它们安分?
  10. MVC5 Entity Framework学习参加排序、筛选和排序功能
  11. 相反数-网易校招编程题
  12. 细胞自动机 c语言程序,细胞自动机之生命游戏
  13. hdu5855二分+最大流
  14. 笔记本电脑外接显示屏的分辨率设置,外接显示屏分辨率总是低一点的解决方法
  15. Datatable转为ListT / DataRow转为实体类对象
  16. 数部视频学习资源,一定有你想要的
  17. b站课堂模式密码破解经历
  18. 什么是String[] argv和String args[]
  19. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文
  20. SMART200PLC与ABB变频器实现MODBUS RTU通讯

热门文章

  1. springboot日志写入mysql_springboot运用logback将日志写入数据库
  2. java change方法作用_程序员必看之Java中方法的参数传递问题
  3. java传参方式_Java里方法的参数传递方式
  4. wpf 导航按钮去掉_高德地图推出个性导航,你的私人订制导航是什么样的?
  5. Search Engine Hacking – Manual and Automation
  6. web渗透测试中WAF绕过讲解(二)基于HTTP协议绕过
  7. JAVA程序员的学习网站(2)
  8. RedHat Linux 企业5 oracle 10g
  9. NClay框架AOP功能简介
  10. 微信小程序订阅消息:用云服务编写订阅消息超详细描述