3.破坏基地

描述 Description

在Z国和W国之间一直战火不断。 好不容易,W国的间谍把完整的Z国的军事基地的地图到手了。 于是W国决定再次出击,一举击破Z国的防线。 W国认真研究了Z国的地形,发现Z国有N个军事基地,我们不妨编号成1..N,而且经过深刻研究,发现1号军事基地是资源补给基地,而N号军事基地是前线。 由于地形的缘故,只有M对军事基地两两可达,当然是有距离的。 此时W国的弹头紧缺,当下的弹头只能去毁灭一个军事基地。当然了,最重要的就是毁灭一个军事基地,使得资源补给基地与前线的最短距离发生变化。但是Z国也不是白痴,他们的资源补给基地与前线有着极高的防御力,所以W国只能去炸掉其余的N-2个基地,当然炸掉某个基地后,这个基地就不可达了。 于是问题就来了,炸掉哪些基地后会使得资源补给基地与前线的最短距离发生变化呢?注:假若炸掉某个基地后,1号基地和N号基地不连通,那么我们也认为他们的最短距离发生了变化。

输入格式 InputFormat

输入数据第一行是两个正整数N,M,意义如题所述。 接下来M行,每行包括三个正整数x,y,d,表示有一条边连接x、y两个地点,其距离为d。数据保证图是连通的。

输出格式 OutputFormat

输出数据的第一行包含一个整数K,表示有K个基地可毁灭,且毁灭其中任意一个后,资源补给基地与前线的最短距离发生变化。接下来K行,每行输出一个军事基地的编号,要求编号递增。 在wyl8899神犇的率领下,W国必胜!!! 因此一定不会存在K=0的情况。

样例输入 SampleInput [复制数据]

6 7

1 2 3

1 5 2

2 3 5

2 4 3

2 5 4

2 6 5

3 4 2

样例输出 SampleOutput [复制数据]

1

2

数据范围和注释 Hint

对于30%的数据,N<=100,M<=1,000;对于60%的数据,N<=2,000,M<=20,000; 对于100%的数据,N<=10,000,M<=100,000,1<=d<=10,000;

时间限制 TimeLimitation

1s
解:spfa+记录前驱(输出路径)

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. #define sc(x) scanf("%d",&x)
  7. #define man 100010
  8. using namespace std;
  9. struct point
  10. {
  11. int next,to,cost;
  12. }e[man*];
  13. int n,num,m,head[man*],pre[man];
  14. int p[man],tot=;
  15. long long dis[man];
  16. bool vis[man];
  17. void add(int from,int to,int cost)
  18. {
  19. e[++num].next=head[from];
  20. e[num].to=to;
  21. e[num].cost=cost;
  22. head[from]=num;
  23. }
  24. queue<int>q;
  25. void spfa(int s)
  26. {
  27. for(int i=;i<=n;i++)
  28. dis[i]=;
  29. memset(vis,,sizeof(vis));
  30. q.push(s);
  31. dis[s]=;
  32. vis[s]=;
  33. while(!q.empty())
  34. {
  35. int u=q.front();
  36. q.pop();
  37. vis[u]=;
  38. for(int i=head[u];i;i=e[i].next)
  39. {
  40. int to=e[i].to;
  41. if(dis[to]>dis[u]+e[i].cost)
  42. {
  43. dis[to]=dis[u]+e[i].cost;
  44. pre[to]=u;
  45. if(!vis[to])
  46. {
  47. vis[to]=;
  48. q.push(to);
  49. }
  50. }
  51. }
  52. }
  53. }
  54. void print(int x)
  55. {
  56. if(pre[x]==x)
  57. return;
  58. print(pre[x]);
  59. p[++tot]=x;
  60. }
  61. int main()
  62. { freopen("destroy.in","r",stdin);
  63. freopen("destroy.out","w",stdout);
  64. sc(n);sc(m);
  65. for(int x,y,z,i=;i<=m;i++)
  66. {
  67. sc(x);sc(y);sc(z);
  68. add(x,y,z);
  69. add(y,x,z);
  70. }
  71. spfa();
  72. pre[]=;
  73. print(n);
  74. sort(p+,p+tot+);
  75. printf("%d\n",tot-);
  76. for(int i=;i<=tot;i++)
  77. { if(p[i]==||p[i]==n)
  78. continue;
  79. printf("%d\n",p[i]);}
  80. return ;
  81. }

冲刺NOIP2015提高组复赛模拟试题(五) 3.破坏基地的更多相关文章

  1. 冲刺NOIP2015提高组复赛模拟试题(五)2.道路修建

    2.道路修建 描述 Description liouzhou_101最悲痛的回忆就是NOI2011的道路修建,当时开了系统堆栈,结果无限RE… 出于某种报复心理,就把那题神奇了一下: 在 Z星球上有N ...

  2. 冲刺NOIP2015提高组复赛模拟试题(五)1.数学作业

    1. 数学作业 [问题描述] 路人丙的数学老师非常乏力,他喜欢出一些非常乏力的数学题来为难乏力的学生们.这次数学老师布置了一堆的数学题作为作业,而且这些数学题有个共同的特点是都求C(N,M)中不同质因 ...

  3. CCF-NOIP-2018 提高组(复赛) 模拟试题(五)

    T1 相遇 [问题描述] 在一场奇怪的梦里,小 Y 来到了一个神奇的国度.这个国度可以用一根数轴表示,小 Y 在 N 处,而小 Y 想吃的美食在 K 处.小 Y 有两种方式移动, 一种叫做步行, 一种 ...

  4. CCF-NOIP-2018 提高组(复赛) 模拟试题(七)

    T1 Adjoin [问题描述] 定义一种合法的\(0-1\)串:串中任何一个数字都与\(1\)相邻.例如长度为$ 3 的 0-1 $串中,\(101\)是非法的,因为两边的\(1\)没有相邻的\(1 ...

  5. CCF-NOIP-2018 提高组(复赛) 模拟试题(四)

    T1 贪吃蛇 [问题描述] 贪吃蛇是一个好玩的游戏.在本题中,你需要对这个游戏进行模拟. 这个游戏在一个 \(n\) 行 \(m\) 列的二维棋盘上进行. 我们用 \((x, y)\) 来表示第 \( ...

  6. CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)

    T1 Circle [问题描述] 小 w 的男朋友送给小 w 一个 n 个点 m 条边的图,并且刁难小 w 要她找出点数最少的正环. 小 w 不会做,于是向你求助. [输入格式] 第一行两个整数\(n ...

  7. CCF-NOIP-2018 提高组(复赛) 模拟试题(一)

    T1 帽子戏法 问题描述 小 Y 有一个\(n*n*n\)的"帽子立方体" ,即一个\(n\)层的立方体,每层的帽子都 可以排成\(n*n\)的矩阵. "帽子立方体&qu ...

  8. 破译情报-NOIP2016提高组复赛模拟试题

    [题目描述] 最近国安人员截获了一份 RB 国的秘密情报, 全文都是经过加密的,每个单 词都很长.破译人员想到先把单词化简一下,方法是把每个单词尽量取短些的前 缀,但所取的前缀不能是其他单词的前缀. ...

  9. CCF-NOIP-2018 提高组(复赛) 模拟试题(三)

    T1 取球游戏 问题描述 现有\(N\)个小球,依次编号为\(1\)到\(N\),这些小球除了编号以外没有任何区别.从这\(N\)个小球中取出\(M\)个,请问有多少种取球方案使得在取出的\(M\)个 ...

随机推荐

  1. 转-SpringMVC——之 国际化

    原文地址:http://www.cnblogs.com/liukemng/p/3750117.html 在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么 ...

  2. 数据结构与算法JavaScript描述——使用队列

    1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...

  3. java代码------计算器

    总结:我用if()语句写计算功能的代码时,实现不了,与switch_-catch语句不一样.不知到怎么实现 package com.p; import javax.swing.*; import ja ...

  4. 百度地图api使用,简单搜索+经纬度定位+自定义消息窗口

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. linux oracle服务器无密码登录dba

    1.su - oracle 切换到oracle 2.sqlplus sys/manger as sysdba 3.新建用户: create user username identified by pa ...

  6. 【POJ】1061 青蛙的约会 / 【BZOJ】1477(扩欧)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 119148   Accepted: 25070 Descript ...

  7. Android:自定义Sqlite数据库路径

    默认的sqlite数据库是放在/data/data/database目录下的,今天看腾讯云IM的demo发现再该路径下找不到它存放消息的数据库,找了下后发现居然是放在/data/data/files目 ...

  8. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  9. django之上传图片

    上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...

  10. 03-23 MVC框架(以查询、删除为例)

    1.MVC的定义: MVC(Model-View-Controller,模型-视图-控制器)是用于将应用程序粉好吃呢过如下3个主要方面的体系结构模式: 模型(Model):一组类和业务规则,类用于描述 ...