problem4:連通性問題
假如已知乙個整數對序列,其中每個整數代表某種型別的乙個物件,而且將p-q對解釋成"p與q連通"。假定連通關係是可傳遞的,即:如果p與q連通,同時q與r連通,則p與r也連通。
任務:編寫乙個程式,從乙個整數對結合中過濾額外的鏈結對。即當程式輸入乙個整數對p-q,僅當程式此時已經看到的對不能通過可傳遞性證明p與q連通時,它才輸出該對。如果前面的對表明p與q連通,則程式應該忽略p-q,並且繼續輸入下乙個對。
樣列輸入:
3 4
4 9
8 0
2 3
5 6
2 9
5 9
7 3
4 8
5 6
0 2
6 1
樣列輸出:
3 4
4 9
8 0
2 3
5 6
5 9
7 3
4 8
6 1
恩,大家回答得都比較對,這個題目的最好解答就是用並集查詢,ysg同學的演算法實現了直接的並集查詢但是對於有n個物件何m個對的連通性問題,ysg同學的演算法時間複雜度為o(m*n)。而事實上,正如他所說在實現時,可以通過開闢乙個陣列來儲存每顆樹的節點數,在連通時,總是連通較小的樹連線到較大樹,這樣可以保證在判斷n個物件的其中兩個物件是否連通時,最多需要跟蹤2lgn個節點,最後的優化的就是進行路徑壓縮。
以下是paoblem4的乙個比較好的實現,在路徑壓縮時使用的是對分路徑壓縮。具體過程請大家自己分析一下語句,順便分析一下演算法的效能,並且思考如何產生一組輸入串行使下面程式生成一條長度為5的搜尋路徑.
#include
#define max_n 10000
int main()
while (scanf("%d %d", &p, &q) == 2) else
printf("%d/t%d/n", p, q);
} return 0;
}
每日一題 some小問題集合
classa object defshow self print this is the a show classb object defshow self print this is the b show obj b obj.show obj.class a obj.show this is th...
每日一題(4)
思路 先用快慢指標找到鍊錶的中點,然後翻轉鍊錶後半部分,再和前半部分組合。注意 把鍊錶分成兩半時,前半段的尾節點要置為null,翻轉鍊錶時也要把尾節點置為null。definition for singly linked list.struct listnode class solution 此時的...
每日一題 獎金問題
一 問題描述 二 問題分析 涉及資料 利潤profit,獎金bonus 資料間的關係 當profit 10w,bonus profit 0.1 當profit 20w,bonus 100000 0.1 profit 100000 0.075 三 由使用者輸入乙個利潤,並將輸入轉換為整數型方便進行比較...