畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 29620    Accepted Submission(s): 15557

Problem Description
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。 
Output
对每个测试用例,在1行里输出最少还需要建设的道路数目。 
Sample Input
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
Sample Output
1 0 2 998

Hint

Hint

Huge input, scanf is recommended.

分析:对于不同的道路和不同的城镇,很容易想到是图的连通问题,所谓并查集,合并后,进行查找,主要说一下查找函数,请看

int find(int x){
return set[x]=(set[x]==x?x:find(set[x]));
}
在一个就是需要最短边的话 首先就应该想到,一个N个顶点的图,想连通的话,
必须得有多少条边呢? 应该是N-1,然后再根据并查集,连一对边就减1,最后
连完也就出来答案了.
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>  int N,M;//n代表点,m代表边
int set[1005];
int temp;  int find(int x)
{  return set[x]=(set[x]==x?x:find(set[x]));  }
void merge(int a,int b)  //合并
{  for(int i=1;i<=N;i++)  {  int x=find(a),y=find(b);  if(x!=y)  {  set[x]=y;  temp--;  //找到后就减1}  }
}  int main()
{  while(scanf("%d%d",&N,&M),N!=0)  {  int a,b;  temp=N-1;  for(int j=1;j<=N;j++)  {  set[j]=j;  }  for(int i=1;i<=M;i++)  {  scanf("%d%d",&a,&b);  merge(a,b);  }  printf("%d\n",temp);  }  return 0;
}  

利用少量的贪心:代码如下:

#include<stdio.h>
int bin[1002];
int findx(int x)
{int r=x;while(bin[r]!=r)r=bin[r];return r;
}
void merge(int x,int y)
{int fx,fy;fx=findx(x);fy=findx(y);if(fx!=fy)bin[fx]=fy;
}
int main()
{int i,n,m,x,y,count;while(scanf("%d",&n),n){for(i=1;i<=n;i++)bin[i]=i;for(scanf("%d",&m);m>0;m--){scanf("%d %d",&x,&y);merge(x,y);}for(count=-1,i=1;i<=n;i++)if(bin[i]==i)count++;printf("%d\n",count);}
}

利用并查集+贪心解决 Hdu1232相关推荐

  1. 码说 | 并查集(以HDU1232为例)

    码说 | 并查集(以HDU1232为例) 欢迎大家关注Zane's平行光工作坊 并查集 题目如下 题意概括 解题思路 并查方法 具体代码 题毕 欢迎大家关注Zane's平行光工作坊 这是Zane第一次 ...

  2. 利用并查集判断一个无向图是否成树

    hdu 1272 利用并查集方法,找到各点的根节点. 几点注意: 一.树:1.无环 2.根节点入度为0,其余入度为1 判断依据: 1.若两个点的根节点相同(这两个点是父子关系),则形成环. 2.若所有 ...

  3. CF 1253D-Harmonious Graph-并查集+贪心

    Description You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to ...

  4. 食物链 (利用并查集的两种解决方法)

    食物链是并查集中的一道经典题, 第一次看<挑战程序设计竞赛>上懵懵懂懂, 最近又看见了发现还是一脸懵逼. 首先题目如下 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形 ...

  5. 基于C语言,详解Kruskal算法(利用并查集)实现构建最小生成树

    目录 一.Kruskal算法的基本介绍 具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边.这里的关键就是如何判断"将它 ...

  6. java并查集找朋友圈_图—并查集(解决朋友圈问题)

    图也是一种 非线性结构,是由多个顶点组成的关系集合组成的一种数据结构.图可以分为两种,无向图和有向图. ★图的定义: ★典型问题: 利用图能够解决很多问题,这里有一个较为典型的问题,假如已知有n个人和 ...

  7. 洛谷 P1967货车运输 并查集+贪心 不需要用LCA!

    题目链接 题目链接 题解 要求所有的路径中最小边长的最大值! 我们贪心的加边,依照边从大往小的方式往里添加,然后合并并查集. 每次当查询分布在两个待合并的并查集的时候,当前的边长就是这次查询的答案. ...

  8. nssl1454-最短路【并查集,贪心】

    正题 题目大意 nnn个点,每个点可以走到[ai,n][a_i,n][ai​,n],每个点可以从[bi,n][b_i,n][bi​,n]到达. 求disi,j∗(i+j)dis_{i,j}*(i+j) ...

  9. HDOJ 1598 find the most comfortable road(并查集+贪心)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  10. 单链表式并查集应用(解决区间合并,区间删除,染色问题)

    单链表式并查集应用 普通并查集(树状): p[i]p[i]p[i] 表示节点 iii 的父节点, iii 所在树的根节点是代表元素. 单链表式并查集(单链表状)时间复杂度 O(m元素值域+n)O(m_ ...

最新文章

  1. 深入理解 wpa_supplicant(二)
  2. .net2.0下数据库连接字符串的使用
  3. Mac OS X下Maven的安装与配置
  4. linux启动tomcat不停的触发gc,tomcat的rmi触发的full gc的时间过长的优化
  5. java判断时间是不是星期五_Java判断当前日期是星期几
  6. javascript 学习笔记之面向对象编程(二):继承多态
  7. ccBPM典型的树形表单和多表头表单的流程示例
  8. Leetcode刷题实战(1):Two Sum
  9. linux下nmap工具的使用
  10. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
  11. jieba库分词词频统计
  12. STP/RSTP/MSTP经典分析与对比
  13. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. 电脑c盘满了怎么清理
  15. 图像变换——分段线性变换
  16. 计算机二级数据模拟表,2020年计算机二级《Access数据库程序设计》模拟题(5)...
  17. 扫描仪共享工具(BlindScanner Pro) 3.23 特别版
  18. 互联网公司的“江湖绰号”盘点,你知道几个?
  19. rank over pation
  20. 获取Google PR值的代码!

热门文章

  1. linux把test目录打包,linux复制、压缩打包、解压缩等操作
  2. 企业知识管理与协同软件Confluence搭建与配置
  3. Python安装时报缺少DLL的解决办法
  4. std::thread的常用参数传递总结
  5. 像差与zernike多项式
  6. Ehcache 3.7文档—基础篇—XML Configuration
  7. 一步步教你轻松学主成分分析PCA降维算法
  8. Codeforces Round #436 (Div. 2)
  9. Django新手图文教程
  10. 构建之法 阅读笔记04