題號:zhoj1258
思路:並查集。
給每個人建立乙個「正集」(朋友)、乙個「反集」(敵人),反集要麼為空、要麼指向乙個正集,維護這兩類集合,最後統計「正集」的個數。
1 #include2 #include3const
int n=1000;4
intans;
5class
unionfindset 14}
15int find(int
x) 18
void union(int op,int x,int
y) 23
if(op==2
) 29}30
int count(int
n) 38
};39
intmain()
48 printf("
%d\n
",s.count(n));
49return0;
50 }
團夥 並查集 團夥 並查集
題目描述 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。輸入輸出格式 輸入格式 ...
團夥 並查集 並查集 團夥
2 n 1000 1 m 5000 1 p q n 試題分析 這種問題我們一般有兩種解法 打標記 多個並查集 打標記這類方法會在銀河英雄傳說中看到 那麼多個並查集如何解決呢?我們設1 n節點是記錄朋友,n 1 2 n節點是記錄敵人 既然兩個人是朋友,根據題意,我們也要把他們的敵人合起來 如果兩個人是...
並查集 團夥(luogu 1892)
定義對手的對手是朋友,朋友的朋友是朋友,現在有n個人和m組關係,如果兩個人是朋友那麼他們屬於同乙個團夥,問有多少個團夥 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團...