修建道路(最小生成树)
N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通。我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条路,并且C和B是连通的。
已知在一些村庄之间已经有了一些路,您的工作是再兴建一些路,使得所有的村庄都是连通的,并且兴建的路的长度是最小的。
输入格式:
第一行是一个整数N(3<=N<=100),代表村庄的数目。后面的N行,第i行包含N个整数,这N个整数中的第j个整数是第i个村庄和第j个村庄之间的距离,距离值在[1,1000]之间。
然后是一个整数Q(0<=Q<=N*(N+1)/2)。后面给出Q行,每行包含两个整数a和b(1<=a<b<=N),表示在村庄a和b之间已经兴建了路。
输出格式:
输出一行仅有一个整数,表示为使所有的村庄连通需要新建公路的长度的最小值。
输入样例:
3
0 990 692
990 0 179
692 179 0
1
1 2
结尾无空行
输出样例:
179
思路:把图转化为结构体存储,然后把已经存在的道路先添加进集合里面去,并把对应的边权置为零,然后排序把剩下的节点添加进去
#include<bits/stdc++.h>using namespace std;const int N=10100,inf=0x3f3f3f3f;int g[N][N],p[N];int find(int x)
{if(x!=p[x]) p[x]=find(p[x]);return p[x];
}
struct node{int x,y,w;
}s[N];
bool cmp(node a,node b)
{return a.w<b.w;
}
int main()
{int n,cnt=0,ans=0;cin>>n;for(int i=1;i<=n;i++) p[i]=i;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>g[i][j];int k;cin>>k;while(k--){int a,b;cin>>a>>b;p[find(a)]=find(b);g[a][b]=g[b][a]=0;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(g[i][j])//转化为结构体{s[cnt].x=i;s[cnt].y=j;s[cnt].w=g[i][j];cnt++;}}}sort(s,s+cnt,cmp);for(int i=0;i<cnt;i++){if(find(s[i].x)!=find(s[i].y)&&g[s[i].x][s[i].y]){p[find(s[i].x)]=s[i].y;ans+=s[i].w;}}cout<<ans;return 0;
}
修建道路(最小生成树)相关推荐
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)
1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1709 Solved ...
- [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路
1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1730 Solved ...
- 7-14 修建道路 (10 分)
7-14 修建道路 (10 分) N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通.我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条 ...
- poj2421修建道路
题目 有N个村庄,编号从1到N,你应该建造一些道路,这样每两个村庄就可以相互连接.我们说两个村庄A和B是相连的,当且仅当A和B之间有一条路,或者存在一个村庄C,使得A和C之间有一条路,C和B是相连的. ...
- 【考题 题解】奇怪机器人单词方阵修建道路
前言 欢迎关注我(小周猪猪)的博客,同时也欢迎关注为你们讲解的乔治大佬(心畅)的博客.如果对于原来的考试,你有不会的题,可以参考数字游戏题解,搜索题解,递归地推题解或者更多讲课内容的笔记与讲解. 1. ...
- BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路
http://www.lydsy.com/JudgeOnline/problem.php?id=1626 Time Limit: 5 Sec Memory Limit: 64 MB Submit: ...
- 修建道路 贪心,思维(女赛)
思路 : 由于每建一条路的花费是这两个下标之间所有数的最大值,因此要让花费尽可能小,就要让下标尽可能接近,所以想到相邻两个连边,且这样刚好n - 1条路 #include <iostream&g ...
- 不止代码:保留道路(ybtoj 最小生成树)
文章目录 题目描述 解析 代码 thanks for reading! 题目描述 解析 其实就是修建道路 我一开始只能想到枚举g去跑最小生成树 是m^2的算法(50pts) 但是其实每次加入的边只有一 ...
- Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal
$ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...
最新文章
- 《网络攻防实践》第二周学习总结
- Python爬取淘宝商品价格销量信息
- 《图书管理系统——java》
- Nginx的配置实例(反向代理实例 )
- 互联网日报 | 新东方二次上市通过港交所聆讯;陌陌宣布任命新CEO;广汽蔚来发致歉声明...
- 利用SQL和Python分别实现人流量查询,考验逻辑思维的时候到了
- 10.搭建vs2010+Qt4.8.5+QtCreator3.4.0开发环境
- 小米12系列渲染图曝光:双曲面屏+屏下摄像头
- 诊断域帐号被锁定的原因
- NHL明星与美国冰球协会联手发起NFT拍卖
- 小米 10 年再创业,高端 5G 手机和 AIoT 有多少机会?
- git问题ERROR: Repository not found.的解决办法
- python会自动释放内存吗_没白熬夜,终于把Python的内存管理机制搞明白了
- 今日头条阅读量怎么刷_自动刷今日头条阅读量 头条号自己刷阅读量
- python怎么下载安装教程_python怎么下载?《python软件下载安装教程》
- javafx教程大全
- 用纯CSS3实现QQ LOGO
- 简单的led驱动 了解下
- HDU-2017 多校训练赛9-1005-FFF at Valentine
- android中加载Gif图片