博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SOJ]连通性问题
阅读量:6988 次
发布时间:2019-06-27

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

Description
关系R具有对称性和传递性。数对p q表示pRq,p和q是0或自然数,p不等于q。 要求写一个程序将数对序列进行过滤,如果一个数对可以通过前面数对的传递性得到,则将其滤去。例如: 输入    输出 	  连通性 3 4      3 4    4 9      4 9 8 0      8 0 2 3      2 3 5 6      5 6 2 9                     2-3-4-9 5 9      5 9 7 3      7 3 4 8      4 8 5 6                     5-6 0 2                     0-8-4-3-2 6 1      6 1

 其中数对2 9和0 2可由之前数对的连通关系得到,故不做输出。

Input

输入共有m行(0<=m<=1000000),每行一个数对,数对的数字之间以1个空格分隔;数对的数字为0或n=100000以内的自然数。

 

Output

输出包含过滤之后的数对序列。每行输出一个数对,数对的数字之间以1个空格分隔。

 

Sample Input
 Copy sample input to clipboard
3 44 98 02 35 62 95 97 34 85 60 26 1
Sample Output
3 44 98 02 35 65 97 34 86 1
//在本题中要删去所有具有连通性的结点,而具有连通性的结点的性质是//在图中具有相同的祖先,则我们只要通过判断两个结点是否存在相同的祖先//即可判断是否需要删去,最直接的做法是每插入一对结点,DFS或BFS,判断是否搜索到相同的点//但这样做法时间复杂度太大,在一开始时就让每个结点指向自己的祖先结点#include
using namespace std;const int MAX = 1000005;int father[MAX];int find(int num) {return ( num==father[num] ? num : (father[num]=find(father[num])) );}int main(){ int m; for(int i=0;i
>point1>>point2) { if(find(point1)!=find(point2)) { cout<
<<" "<
<

  

转载于:https://www.cnblogs.com/KennyRom/p/6248053.html

你可能感兴趣的文章
Eclipse记录
查看>>
C++ 一个自己实现的字符串类
查看>>
KVM
查看>>
Go语言知识积累:windows开发环境搭建
查看>>
我的友情链接
查看>>
字节流
查看>>
大型网站架构演变和知识体系
查看>>
抛砖引玉:Session和Cookie在WEB开发中的最佳实践
查看>>
一次小***处理
查看>>
哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
查看>>
电子商务系统的设计与实现(八):前端商城系统功能细化
查看>>
深入理解 Kubernetes CPU Mangager
查看>>
java web中过滤敏感词汇的简单方法
查看>>
Nginx配置文件nginx.conf中文详解
查看>>
linux anaconda kickstart基础
查看>>
DITA vs DocBook
查看>>
调整Outlook 2010的pst文件大小
查看>>
python笔记二 基础
查看>>
nohup /dev/null 2>&1 含义详解
查看>>
Micropython教程之TPYBoard DIY超声波测距仪实例演示
查看>>