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;
}

修建道路(最小生成树)相关推荐

  1. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1709  Solved ...

  2. [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1730  Solved ...

  3. 7-14 修建道路 (10 分)

    7-14 修建道路 (10 分) N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通.我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条 ...

  4. poj2421修建道路

    题目 有N个村庄,编号从1到N,你应该建造一些道路,这样每两个村庄就可以相互连接.我们说两个村庄A和B是相连的,当且仅当A和B之间有一条路,或者存在一个村庄C,使得A和C之间有一条路,C和B是相连的. ...

  5. 【考题 题解】奇怪机器人单词方阵修建道路

    前言 欢迎关注我(小周猪猪)的博客,同时也欢迎关注为你们讲解的乔治大佬(心畅)的博客.如果对于原来的考试,你有不会的题,可以参考数字游戏题解,搜索题解,递归地推题解或者更多讲课内容的笔记与讲解. 1. ...

  6. BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1626 Time Limit: 5 Sec  Memory Limit: 64 MB Submit:  ...

  7. 修建道路 贪心,思维(女赛)

    思路 : 由于每建一条路的花费是这两个下标之间所有数的最大值,因此要让花费尽可能小,就要让下标尽可能接近,所以想到相邻两个连边,且这样刚好n - 1条路 #include <iostream&g ...

  8. 不止代码:保留道路(ybtoj 最小生成树)

    文章目录 题目描述 解析 代码 thanks for reading! 题目描述 解析 其实就是修建道路 我一开始只能想到枚举g去跑最小生成树 是m^2的算法(50pts) 但是其实每次加入的边只有一 ...

  9. Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal

    $ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...

最新文章

  1. 《网络攻防实践》第二周学习总结
  2. Python爬取淘宝商品价格销量信息
  3. 《图书管理系统——java》
  4. Nginx的配置实例(反向代理实例 )
  5. 互联网日报 | 新东方二次上市通过港交所聆讯;陌陌宣布任命新CEO;广汽蔚来发致歉声明...
  6. 利用SQL和Python分别实现人流量查询,考验逻辑思维的时候到了
  7. 10.搭建vs2010+Qt4.8.5+QtCreator3.4.0开发环境
  8. 小米12系列渲染图曝光:双曲面屏+屏下摄像头
  9. 诊断域帐号被锁定的原因
  10. NHL明星与美国冰球协会联手发起NFT拍卖
  11. 小米 10 年再创业,高端 5G 手机和 AIoT 有多少机会?
  12. git问题ERROR: Repository not found.的解决办法
  13. python会自动释放内存吗_没白熬夜,终于把Python的内存管理机制搞明白了
  14. 今日头条阅读量怎么刷_自动刷今日头条阅读量 头条号自己刷阅读量
  15. python怎么下载安装教程_python怎么下载?《python软件下载安装教程》
  16. javafx教程大全
  17. 用纯CSS3实现QQ LOGO
  18. 简单的led驱动 了解下
  19. HDU-2017 多校训练赛9-1005-FFF at Valentine
  20. android中加载Gif图片

热门文章

  1. Ubuntu下 vim安装失败的解决方法 以及安装vim
  2. 突破IP封锁,共享网络
  3. osgearth加载国界线、省界线、城市线
  4. 使用vs2015打开以前版本的.sln工程不兼容的问题
  5. Json在线编辑和格式化工具
  6. 2021年12月电子学会图形化三级编程题解析含答案:数星星
  7. 帮助新员工快速形成战斗力,Filez在入职与培训场景应用
  8. delphi 整理的常用函数
  9. 微信小程序--优购商城项目(8)
  10. hpux 操作系统 磁带备份与恢复