10400: B.海岛争霸

Time Limit: 2 Sec  Memory Limit:
128 MB

Submit: 128  Solved: 46

[Submit][Status][Web
Board
]

Description

神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。 这是一个由海洋、岛屿和海盗组成的危险世界。杰克船长准备从自己所占领的岛屿A开始征程,逐个去占领每一个岛屿。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,建立起一个强大的海盗帝国。
杰克船长手头有一张整个海域的海图,上面详细地记录了各个海屿的位置,以及海屿之间的通航路线。但他发现,有的航海路线太危险了,杰克船长的战船很难直接通过,他必须想方设法绕道航行;还有的岛屿根本到达不了。
杰克船长现在想把航行的危险程度降到最小。具体地来说,就是杰克船长提出若干个询问,他想知道从岛屿A 到岛屿B 有没有行驶航线,若有的话,所经过的航线,危险程度最小可能是多少。

Input

第1行:     N M        表示有N个岛屿,M条直航路线
第2~M+1行:    A   B   V   表示从岛屿A到岛屿B的航海路线的危险程度值为V。
接下面一行 :   Q           表示询问的次数。
之后有Q个行:  A B       表示询问从岛屿A 到岛屿B 所经过的航线,危险程度最小值
 1<N≤100 0<M≤500  
1≤ Q≤20   0 < V≤1000,
所有数据都是正整数。输入数据之间有一个空格。
 

Output

对于每个询问,输出占一行,一个整数,表示从岛屿A 到岛屿B 所经过的航线,危险程度最小值;若从岛屿A 无法到达岛屿B,则输出-1。

Sample Input

  1. 10 8
  2. 1 2 5
  3. 1 3 2
  4. 2 3 11
  5. 2 4 6
  6. 2 4 4
  7. 6 7 10
  8. 6 10 5
  9. 10 7 2
  10. 5
  11. 2 3
  12. 1 4
  13. 3 7
  14. 6 7
  15. 8 3

Sample Output

  1. 5
  2. 5
  3. -1
  4. 5
  5.  
  6. -1
  7.  
  8.  
  9. #include<stdio.h>
  10. #include<string.h>
  11. #include<algorithm>
  12. using namespace std;
  13. #define INF 0x3f3f3f
  14. int n,m;
  15. int pre[1010];
  16. struct node
  17. {
  18. 	int x,y;
  19. 	int val;
  20. }p[1010];
  21. int cmp(node s1,node s2)
  22. {
  23. 	return s1.val<s2.val;
  24. }
  25. void init()
  26. {
  27. 	for(int i=1;i<=n;i++)
  28. 	pre[i]=i;
  29. }
  30. int find(int x)
  31. {
  32. 	return pre[x]==x?x:find(pre[x]);
  33. }
  34. void join(int x,int y)
  35. {
  36. 	int fx=find(x);
  37. 	int fy=find(y);
  38. 	if(fx!=fy)
  39. 	pre[fy]=fx;
  40. }
  41. int main()
  42. {
  43. 	while(scanf("%d%d",&n,&m)!=EOF)
  44. 	{
  45. 		for(int i=0;i<m;i++)
  46. 		scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].val);
  47. 		sort(p,p+m,cmp);
  48. 		int q;
  49. 		scanf("%d",&q);
  50. 		while(q--)
  51. 		{
  52. 			int s,e,flog,maxx;
  53. 			scanf("%d%d",&s,&e);
  54. 			int minn=INF;
  55. 			for(int i=0;i<m;i++)
  56. 			{
  57. 				init();
  58. 				flog=0;
  59. 				maxx=p[i].val;
  60. 				for(int j=i;j<m;j++)
  61. 				{
  62. 					join(p[j].x,p[j].y);
  63. 					maxx=max(maxx,p[j].val);
  64. 					if(find(pre[s])==find(pre[e]))
  65. 					{
  66. 						flog=1;
  67. 						break;
  68. 					}
  69. 				}
  70. 				if(flog)
  71. 				minn=min(minn,maxx);
  72. 			}
  73. 			if(minn==INF)
  74.             printf("-1\n");
  75.             else
  76.             printf("%d\n",minn);
  77. 		}
  78. 	}
  79. 	return 0;
  80. }

zzuoj--10400--海岛争霸(并查集)的更多相关文章

  1. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  2. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  3. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  4. bzoj1854--并查集

    这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...

  5. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  6. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  7. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  8. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

  9. “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)

    题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...

随机推荐

  1. JSTL中的常用EL函数(fn:contains(str,subStr))

    转自:https://blog.csdn.net/u012843873/article/details/53289238 ① fn:toLowerCase ④fn:length fn:length函数 ...

  2. 剑指offer——06旋转数组的最小数字(Python3)

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...

  3. 匹配替换指定文本为html标签

    最近看了一道前端面试题,是关于正则的,用尽可能低复杂度的函数,匹配替换指定文本为html标签,题目是这样的: 特定语法匹配替换 说明:匹配字符串中形如 =g文字文字= 的语法,并将相应部分转化为对应的 ...

  4. httpclient定时请求实例

    1.pom.xml <properties> <slf4j.version>1.7.21</slf4j.version> <okhttp.version> ...

  5. php链接memcache操作

    设置值 set key 压缩标识 有效期 长度 set name 0 60 5 hello 压缩标识:用于告诉memcached服务器是否压所后存储数据,目的是为了节省磁盘空间,压所和解压缩会消耗时间 ...

  6. 解决问题方法:没有设置对象,app.Config没有配置

  7. Hua Wei 机试题目二

    题目描述:假设1元,5元,10元,50元,100元的人民币若干,实现一个能找到最少张数累计达到一个指定金额方法.如:67元,可分为67个1元钱.也可分为6个10元7个1元,其中最少人民币分法为一张50 ...

  8. 错误:java.lang.IllegalArgumentException: Receiver not registered

    Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.multak.cookaraclient.Mai ...

  9. bootstrap-导航条

    默认样式的导航条 导航条是在您的应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开可关),且在视口(viewport)宽度增加时逐渐变为水平展开模式. 两端对齐的导航条导航链 ...

  10. javscript中变量的作用域和提升

    示例: var a = 1; function foo() {   if (!a) {     var a = 10;   }    alert(a); }; foo(); 上面这段代码在运行时会产生 ...