思路:首先使用二维数组dis[][]处理输入, 对于已经修好的路,将其对应的dis[i][j]置为零即可。最后再将

      所有的dis[][]保存到边结构体中,使用Kruskal算法求得最小生成树。

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<cmath>
 5 #include<set>
 6 #include<algorithm>
 7 #include<cstdio>
 8 #include<map>
 9 #include<cstring>
10
11 using namespace std;
12
13 int dis[110][110];
14 struct Edge
15 {
16     int a, b;
17     int cost;
18 }edge[1000010];
19
20 int Tree[110];
21
22 int findRoot(int x)
23 {
24     if(Tree[x] == -1)
25         return x;
26     int tmp = findRoot(Tree[x]);
27     Tree[x] = tmp;
28     return tmp;
29 }
30
31 bool cmp(Edge e1, Edge e2)
32 {
33     return e1.cost < e2.cost;
34 }
35
36 int main()
37 {
38     int n;
39     scanf("%d", &n);
40     for(int i = 1; i <= n; ++i)
41         Tree[i] = -1;
42
43     for(int i = 1; i <= n; ++i)
44         for(int j = 1; j <= n; ++j)
45             scanf("%d", &dis[i][j]);
46
47     int q;
48     scanf("%d", &q);
49     for(int i = 1; i <= q; ++i)
50     {
51         int a, b;
52         scanf("%d %d", &a, &b);
53         dis[a][b] = 0;
54     }
55
56     int k = 1;
57     for(int i = 1; i <= n; ++i)
58         for(int j = 1; j <= n; ++j)
59         {
60             if(i != j && i < j)    // 注意同一条边不要重复保存!
61             {
62                 edge[k].a = i;
63                 edge[k].b = j;
64                 edge[k].cost = dis[i][j];
65                 ++k;
66             }
67         }
68     sort(edge+1, edge+k, cmp);
69     int ans = 0;
70     for(int i = 1; i < k; ++i)
71     {
72         int ra = findRoot(edge[i].a);
73         int rb = findRoot(edge[i].b);
74         if(ra != rb)
75         {
76             Tree[ra] = rb;
77             ans += edge[i].cost;
78         }
79     }
80
81     printf("%d\n", ans);
82
83     return 0;
84 }

转载于:https://www.cnblogs.com/FengZeng666/p/11404856.html

Constructing Roads POJ - 2421 (最小生成树)相关推荐

  1. 22.12.14补卡 Constructing Roads POJ - 2421

    Constructing Roads - POJ 2421 - Virtual Judge 只有输入有点小坑 只有上三角的数据是有用的, 下三角的数据与上三角重复, 可不处理, 把i>=j的全部 ...

  2. HDU1102 Constructing Roads 最小生成树

    点击打开链接 Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In Ha ...

  3. HDOJ1102 Constructing Roads【最小生成树】-----武科大ACM暑期集训队选拔赛1题

    这道题目没有做出来,代码写好之后一直没有AC,本以为做了这么多最小生成树的题目,这道题一定没问题的,结果很遗憾,没有注意细节问题: 首先,如何处理已经建好的路?已经建好的路说明这两个点是连通的,只要把 ...

  4. 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)

    题干: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  5. hdu 1025 Constructing Roads In JGShining's Kingdom(DP + 二分)

    此博客为转发 Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

  6. poj 2421 Constructing Roads

    #include<iostream> //最小生成树primusing namespace std;const int max_ve=105,MaxWeight=2000;int n,ed ...

  7. POJ 2421 Constructing Roads MST kruskal

    最近刚学的并查集所以用kruskal来试试最小生成树~ kruskal其实用几句话就能说完~  1.贪心所有边的权值,从小到大取值 2.取值时~将边权非0的两个顶点~进行并查操作~如果两个点的祖先不同 ...

  8. 【HDU - 1102】Constructing Roads (最小生成树裸题模板)

    题干: There are N villages, which are numbered from 1 to N, and you should build some roads such that ...

  9. POJ2421 Constructing Roads 最小生成树

    修路 时限: 2000MS   内存限制: 65536K 提交总数: 31810   接受: 14215 描述 有N个村庄,编号从1到N,您应该修建一些道路,使每两个村庄可以相互连接.我们说两个村庄A ...

最新文章

  1. 轻松练:如何从900万张图片中对600类照片进行分类|技术头条
  2. Start DWM manually on Windows 7 and vista
  3. jit 方法内联_JIT编译器,内联和转义分析
  4. 关于django新版本无法使用MySQL数据库的问题
  5. IDUdpServer研究心得
  6. Windows编辑shell脚本后上传Linux格式问题
  7. ES6学习(八)—Promise对象 超鸡重要
  8. hudi系列-文件压缩(compaction)
  9. 移动机器人定位方法概述
  10. 不解压压缩包直接解析内部文件(zip)
  11. Win32创建异形窗口
  12. YOLOV5源码解读(数据集加载和增强)
  13. 【漫画+图解】面试官让我用 2GB 内存给 20亿个整数(需要8GB内存)排序,我该咋整??
  14. php detailview,PHP开发框架Yii Framework教程(31) Zii组件-DetailView示例
  15. Android中Notification的使用(一)
  16. Jedis的基本使用
  17. web 页面的提交方式
  18. 视频推流技术_ai视频流的最新技术进步
  19. 为什么巨头们都盯上了健康?
  20. 义乌个体户的常见问题解答分析

热门文章

  1. CCIE路由实验(4) -- BGP路由控制
  2. 如何设置SSH访问的时间限制
  3. Managed keyedState中的ValueStateDescriptor与MapStateDescriptor
  4. ERROR 3948 (42000): Loading local data is disabled问题解决
  5. hive内表和外表区别(转载+自己整理)
  6. 5-5 用TSNE进行数据降维并展示聚类结果
  7. 大话数据结构02 :线性表链式存储 C++
  8. 3.2 参数估计:极大似然估计方法 ML
  9. android10唯一识别,Android 10 如何获取唯一值?
  10. 计算机网络资料篇(二)——快速理解网络协议