热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

poj2421ConstructingRoads解题报告

题目链接:http:poj.orgproblem?id2421实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是,


题目链接:http://poj.org/problem?id=2421


        实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是,给出一些已连接的边,要在这些边存在的情况下,拓展出最小生成树来。


       一般来说,过到这四组数据大体上就能AC了。  1、题目给出的案例数据    2、连接的道路可能把所有的村庄都已经连通了       3、两个村庄给出多次,即连接这两个村庄的道路是重复的!。 


2、3这两种情况的数据如下(为了好看,自己出了一组,当然Sample Input 那组也行):


情况2(所有村庄已连通):                   情况3:


       还有第4种情况:



1 #include
2 #include
3 using namespace std;
4
5 const int maxe = 10000 + 10; // 这里开小点也行,因为只存储矩阵不够一半的数据
6 int rep[maxe], vis[maxe];
7
8 struct sets
9 {
10 int v1, v2;
11 int value;
12 } exa[maxe];
13
14 int cmp(sets a, sets b)
15 {
16 return a.value < b.value;
17 }
18
19 int find(int x)
20 {
21 return x &#61;&#61; rep[x] ? x : find(rep[x]);
22 }
23
24 int main()
25 {
26 int i, j, n, a, b, x, y, t, cnt, flag;
27 while (scanf("%d", &n) !&#61; EOF)
28 {
29 for (i &#61; 1; i <&#61; n; i&#43;&#43;)
30 {
31 rep[i] &#61; i;
32 }
33 cnt &#61; 0;
34 for (i &#61; 1; i <&#61; n; i&#43;&#43;)
35 {
36 for (j &#61; 1; j <&#61; n; j&#43;&#43;)
37 {
38 scanf("%d", &a);
39 if (i // 只存储上三角矩阵
40 {
41 exa[cnt].v1 &#61; i;
42 exa[cnt].v2 &#61; j;
43 exa[cnt].value &#61; a;
44 cnt&#43;&#43;;
45 }
46 }
47 }
48 sort(exa, exa&#43;cnt, cmp); // 对长度进行从小到大排序
49 flag &#61; 0;
50 memset(vis, 0, sizeof(vis));
51 scanf("%d", &t);
52 while (t--)
53 {
54 scanf("%d%d", &a, &b);
55 if (a > b)
56 swap(a, b); // 刚开始就保持小的元素的祖先是大的元素
57 x &#61; find(a);
58 y &#61; find(b);
59 if (x > y)
60 {
61 swap(x, y); // 合并集合的时候&#xff0c;有可能使得大的元素的祖先变成了是比它小的元素
62 }
63 if (vis[a] && vis[b]) // 两个村庄在之前已经被访问过&#xff0c;这是为了处理情况4的情况的
64 rep[x] &#61; y;
65 else
66 {
67 if (x &#61;&#61; y) // 所有村庄都有路可通
68 flag &#61; 1;
69 if (!vis[a] && !vis[b])
70 {
71 rep[x] &#61; y;
72 vis[a] &#61; vis[b] &#61; 1;
73 }
74 else if (!vis[a])
75 {
76 rep[x] &#61; y;
77 vis[a] &#61; 1;
78 }
79 else if (!vis[b])
80 {
81 rep[x] &#61; y;
82 vis[b] &#61; 1;
83 }
84 }
85 }
86 if (!flag)
87 {
88 int minval &#61; 0;
89 for (i &#61; 0; i )
90 {
91 x &#61; find(exa[i].v1);
92 y &#61; find(exa[i].v2);
93 if (x !&#61; y)
94 {
95 minval &#43;&#61; exa[i].value;
96 if (x < y) // 为了与前面相一致&#xff0c;也是小的元素的祖先是大的元素
97 rep[x] &#61; y;
98 else
99 rep[y] &#61; x;
100 }
101 }
102 printf("%d\n", minval);
103 }
104 else
105 printf("0\n");
106 }
107 return 0;
108 }


       其实&#xff0c;还有一种比较简单的方法&#xff0c;但是目前还不会实现。Dwylkz给的解法&#xff1a;题目给的已连通的村庄的value都设为0。感觉这样会少讨论很多情况&#xff0c;希望以这种方法过了的读者可以指点一下&#xff0c;好像在上面的代码修改比较难实现。


 


转载于:https://www.cnblogs.com/windysai/p/3313815.html



推荐阅读
  • *题意:往区间[1,10000000]的墙上贴海报,海报数量 ... [详细]
  • 做了题还是忍不住要写一发题解,感觉楼下的不易懂啊。本题解使用latex纯手写精心打造。题意:求\(\frac{1}{x}\frac{1}{y}\frac ... [详细]
  • Bzoj1185最小矩阵覆盖[旋转卡壳+凸包+处理[0]情况]
    题目链接题目大意:就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉解题思路& ... [详细]
  • P3521[POI2011]ROTTreeRotations题目大意:给一棵$(1≤n≤200000)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少。我们 ... [详细]
  • 标准库Vector类型使用需要的头文件:#includeVector:Vector是一个类模板。不是一种数据类型。Vector ... [详细]
  • 题意:多模式串匹配,输出模式串的ID思路:典型AC自动机.用向量存储答案ID#include<cstdio>#include<cstring> ... [详细]
  • 可见的直线为一下凸壳。先按斜率和截距从小到大排序,再用单调栈判断交点的相对位置即可。#includeconstintN5e4+7;constdouble ... [详细]
  • 网站秒开算什么,Google
    作为一家活在Web世界的公司,Google对提升网页性能一直是不遗余力。今天,为了让用户能够更快地浏览网页,Google联合8家科技公司以及近30家新闻机构一起发布了一个名为移动页 ... [详细]
  • 对于一些不符合的点来说,肯定是被他的父节点上权值最小的点转换最好。首先我们先排除不可能情况也就是01不等之后发现,交换完两个数后,0不符合的和1不符合的个数各自-1,因此不会影响其 ... [详细]
  • 参考博文:https:www.cnblogs.comjoeblackzqqarchive201207102584121.html1、获取从1970年到现在的秒数(时间戳)time_ ... [详细]
  • ProblemDescriptionTheCzechTechnicalUniversityisratherold—youalreadyknowthatitcelebrate ... [详细]
  • Asp.Net MVC之 自动装配、动态路径(链接)等
    一、Model层1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Web;5 ... [详细]
  • 优秀网页翻译:一个智能旋钮:DIY haptic input knob: BLDC motor + round LCD
    一个智能旋钮:DIYhapticinputknob:BLDCmotorroundLCD智能旋钮硬件设计智能旋钮视图演示视频3DCAD建立一个你自己的?基 ... [详细]
  • Linux多线程(2)
    线程的知识点太多,太重要,所以分成三部分进行总结学习线程安全多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。 ... [详细]
  • 利用cacti添加mysql监控_cacti监控mysql  mysql复制
    监控mysqlmysql复制5.1.1主机配置1台cactiserver10.10.54.1593台msyqlservermaster:10.10.54.157sla ... [详细]
author-avatar
我才不要喜欢你了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有