博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冗余关系_并查集
阅读量:5025 次
发布时间:2019-06-12

本文共 1392 字,大约阅读时间需要 4 分钟。

冗余关系

蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说。它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是任务关系里有冗余的时候。什么是冗余关系呢?

这篇小说里有n句描述人物关系的句子,描述了n个人的关系。

每条句子的定义是这样的:

    X<->Y    它的意思是:X认识Y,Y也认识X

我们认为小说中的人物关系是具有传递性的,假如A认识B,B认识C,则A也认识C。

冗余关系的定义:就是即使没有这条人物关系,原来的人物之间的所有关系也照样成立。

比如:

小说中已经提到了A认识B,B也认识C。在此之后再讲A认识C就是一个冗余的关系。

小蒜头想求出一共有多少条冗余关系,你能帮帮它吗?

输入格式:

    第一行两个整数,表示句子数量n(1<=n<=1000),表示人数m(1<=m<=1000)。

    接下来n行,每行两个数,表示一组人物关系。

输出格式:

    一个整数,表示冗余关系的数目。

样例输入

3 31 21 32 3

样例输出

1 解题思路:并查集可以用用数组来表示图,每一个连通子图都选出一个队长,然后构造成树状的。。。。   此题要输出冗余关系,如果有两个数的队长是同一个,说明此时的关系是冗余关系,cou++。
#include 
#include
using namespace std;int s[1005];int cou=0;int find_set(int a){ if(s[a]!=a) s[a]=find_set(s[a]); return s[a];}void union_set(int a,int b){ int fa=find_set(a); int fb=find_set(b); if(fa!=fb){ s[fa]=fb; }else{ cou++; }}int main(){ int n,m; int x,y; scanf("%d %d",&n,&m); for(int i=1;i<=m;i++){ s[i]=i; } for(int i=0;i

 新模板:

int par[MAX_N];int depth[MAX_N];//记录每个节点下面到位深度void init(int n)//初始化    {
for(i,0,n) {par[i]=i;depth[i]=1;}}int findf(int t)//寻找根节点 { return t==par[t] ? t:par[t]=findf(par[t]);}bool same(int x,int y)//是否在同一组内 {
return findf(x)==findf(y);}void unite(int t1,int t2){
//成为一组 int f1=findf(t1); int f2=findf(t2); if(f1==f2){ return ; } if(depth[f1]

 

转载于:https://www.cnblogs.com/TWS-YIFEI/p/5838900.html

你可能感兴趣的文章
关于 ORA-01439: 要更改数据类型, 则要修改的列必须为空
查看>>
Docker 生态
查看>>
Spring整合jdbc-jdbc模板api详解
查看>>
Tomcat:Can't load AMD 64-bit .dll on a IA 32 platform(问题记录)
查看>>
JAVA 集合JGL
查看>>
Python创建删除文件
查看>>
最全的分区类型及详解
查看>>
Python 类中__init__()方法中的形参与如何修改类中属性的值
查看>>
9.1.3 前端 - HTML body标签 - 文本样式
查看>>
ACID属性
查看>>
cnpm不是内部命令的解决方案:配置环境变量
查看>>
7系列FPGA远程更新方案-QuickBoot(转)
查看>>
导出帐号和权限脚本
查看>>
markdown公式编辑参考
查看>>
利用运行时给模型赋值
查看>>
归并排序求逆序对
查看>>
SQL2008用sql语句给字段添加说明
查看>>
JavaScript的对象创建
查看>>
树形DP(统计直径的条数 HDU3534)
查看>>
python学习之路(25)
查看>>