热门标签 | 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



推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
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社区 版权所有