隔壁的dgdger带我看了看老师的LCA教程,我因为学习数学太累了(就是懒),去水了一下,感觉很简单的样子,于是我也来写(水)个博客吧。

题目描述
某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?
输入格式
输入包含若干组测试测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目n和道路数目m
随后的m行对应m条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从
1到n编号。
注意:两个城市间可以有多条道路相通。
输出格式
对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

看这个题板像极了并查集(就是)我们加上一点点优化就可以变成LCA(最近公共祖先)。

首先我们先说说并查集怎么做:并查集就是把相连接的点放到一个集合里,就像战争一样,一个士兵遇见了另一个,2人如果不是同一个主公的士兵,就会打起来(不会有士兵自相残杀吧),那怎么判断他们两个是不是同一个主公的士兵呢?当然是飞鸽传书给自己的将军,将军要给将军的将军飞鸽传书……等传到2人主公那里,主公再告诉他们,得知2人的主公是同一人后,2人就会和谐离去,不是同一人,2人就会打起来,输了的那个会劝说自己的主公和对方主公合作(因为训练机制一样,一个打不过一队肯定也打不过,不过这真是太和谐了)。蛋是,士兵们不傻……战场上这么多人,每次都要向上级不断的问也太费劲了,于是士兵们相处了一个好办法,已经知道自己的主公是谁时,只要去问问主公,自己有没有投靠别的主公,如果有,就继续问。而且中途的将军和主公们也记下自己最大的主公是谁,这样以后查找就会轻松很多啦。(其实这就是很简单的LCA)

现在这个题相当于给出了每个士兵的战况,但现在主公们想要和谐相处,问他们还要让士兵打几架?

#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,a,b,shu;
long long f[1005];
int zbb(int wz)
{
if(f[wz]==wz)//如果现在这位是最大的主公,就可以退出了
{
return wz;
}
f[wz]=zbb(f[wz]);//中间迷茫的将军们找到了自己为谁而厮杀
return f[wz];//让将军告诉我
}
int main()
{
while(true)
{
scanf("%lld",&n);//给出势力的数量
if(n==0)
{
return 0;
}
shu=0;//势力的初始化
for(int i=1;i<=n;i++)
{
f[i]=i;
}
scanf("%lld",&m);//给出打了多少架
for(int i=0;i<m;i++)
{
cin>>a>>b;//给出双方
f[zbb(a)]=zbb(b);//假设b赢了,a的势力投靠b
}
for(int i=1;i<=n;i++)
{
if(f[i]==i)//这个势力没投靠过任何人,是一个单独的势力
{
shu++;
}
}
cout<<shu-1<<endl;//一共有shu个单独势力,要求剩下一个,所以要打shu-1架
}
return 0;
}

哎呀我真是机智,士兵们都会感谢我的。

P1536 村村通(洛谷)并查集的更多相关文章

  1. P1536 村村通 洛谷

    https://www.luogu.org/problem/show?pid=1536 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府“村村通工程”的 ...

  2. 洛谷—— P1536 村村通

    P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府“村村通工程”的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...

  3. 洛谷 P1536 村村通

    目录 题目 思路 \(Code\) 题目 P1536 村村通 思路 并查集,一开始连通快的数量为\(n\),输入\(m\)条边时如果该边起点和终点不在同一联通块内就合并并让联通块数量减一,最后输出联通 ...

  4. P1536 村村通

    原题链接 https://www.luogu.org/problemnew/show/P1536 昨天刚学的并查集,今天正好练习一下,于是就找到了这个题 看起来好像很简单,尤其是你明白了思路之后,完全 ...

  5. 洛谷 P1536 村村通(并查集)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1536 思路: 这道题可以看出是并查集的思想,然后用一个while嵌套一下,输入一条路的两个端点,就 ...

  6. 【洛谷】【最小生成树】P1536 村村通

    [题目描述:] 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路 ...

  7. [洛谷P1536]村村通

    题意:多组数据,当n为0时结束,每组数据表示有n个村子,m条路,求还需要建多少条路,使得所有的村子联通题解:用并查集求出有多少个联通块,然后求解 C++ Code: #include<cstdi ...

  8. P1536村村通

    这是一个并查集的题,被洛谷评为提高—. 拿到这个题便看出了这是一个裸的并查集,于是就写了一个模板,结果发现连输入都输不进去,一看竟然是多组数据,,然后看到N==0结束,于是便加了一层while.之后提 ...

  9. 【luogu P1536 村村通】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1536 并查集的运用,可以用生成树的思想,就是n个点生成一棵树需要n-1条边.这样我们先把已有的路连接到一个并 ...

随机推荐

  1. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  2. ABP(ASP.NET Boilerplate Project)快速入门

    前言 这两天看了一下ABP,做个简单的学习记录.记录主要有以下内容: 从官网创建并下载项目(.net core 3.x + vue) 项目在本地成功运行 新增实体并映射到数据库 完成对新增实体的基本增 ...

  3. Ubuntu16.04CPU下安装caffe的艰苦历程

    我选用的是anaconda安装,符上我参照的三个有用的教程. 1 http://www.linuxdiyf.com/linux/22442.html 主要讲anaconda的安装和python路径配置 ...

  4. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  5. Centos 6.4 安装/卸载 Adobe Reader 9(.bin .tar.bz2 rpm 包)

    一.To install Adobe Reader 9.1 using a tarball installer 1. Open a terminal window. 2. Change directo ...

  6. 关于使用swagger的问题

    近来在公司实现,接触到不少新的工具框架,今天见识到了一个新的工具,它的存在好像是情理之中的,但是以前就没有遇到这东西.那就是swagger,它的功能就是把你写的controller的内容都集合到一起方 ...

  7. 【秒懂Java】【02_搭建开发环境】01_Java开发必备

    这篇文章主要讲解:要想使用Java来开发软件,需要做哪些准备工作? 配置电脑 作为一名开发人员,对文件的类型.大小等信息是比较敏感的,所以建议你的电脑做2个配置: 显示文件扩展名 文件扩展名(File ...

  8. java语言基础(四)_面向对象_类_对象_封装_构造

    面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...

  9. 《The Google File System》论文研读

    GFS 论文总结 说明:本文为论文 <The Google File System> 的个人总结,难免有理解不到位之处,欢迎交流与指正 . 论文地址:GFS Paper 阅读此论文的过程中 ...

  10. 如何提高CSS性能?CSS优化、提高性能提升总汇

    如何提高CSS性能,根据页面的加载性能和CSS代码性能,主要表现为: 加载性能 (主要是从减少文件体积,减少阻塞加载,提高并发方面入手),选择器性能,渲染性能,可维护性.   1.尽量将样式写在单独的 ...