日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[SOJ]连通性问题

發布時間:2024/9/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SOJ]连通性问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 4 4 9 8 0 2 3 5 6 2 9 5 9 7 3 4 8 5 6 0 2 6 1 Sample Output 3 4 4 9 8 0 2 3 5 6 5 9 7 3 4 8 6 1 //在本題中要刪去所有具有連通性的結點,而具有連通性的結點的性質是 //在圖中具有相同的祖先,則我們只要通過判斷兩個結點是否存在相同的祖先 //即可判斷是否需要刪去,最直接的做法是每插入一對結點,DFS或BFS,判斷是否搜索到相同的點 //但這樣做法時間復雜度太大,在一開始時就讓每個結點指向自己的祖先結點 #include<iostream> 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<MAX;i++)father[i]=i;int point1, point2;while(cin>>point1>>point2){if(find(point1)!=find(point2)){cout<<point1<<" "<<point2<<endl;father[find(point1)]=father[find(point2)];}}return 0; }

  

轉載于:https://www.cnblogs.com/KennyRom/p/6248053.html

總結

以上是生活随笔為你收集整理的[SOJ]连通性问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。