定義對手的對手是朋友,朋友的朋友是朋友,現在有n個人和m組關係,如果兩個人是朋友那麼他們屬於同乙個團夥,問有多少個團夥
2023年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是:
我朋友的朋友是我的朋友;
我敵人的敵人也是我的朋友。
兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。
輸入格式:
輸入檔案gangs.in的第一行是乙個整數n(2<=n<=1000),表示強盜的個數(從1編號到n)。 第二行m(1<=m<=5000),表示關於強盜的資訊條數。 以下m行,每行可能是f p q或是e p q(1<=p q<=n),f表示p和q是朋友,e表示p和q是敵人。輸入資料保證不會產生資訊的矛盾。
輸出格式:
輸出檔案gangs.out只有一行,表示最大可能的團夥數。
輸入樣例#1:
輸出樣例#1:6
4e 1 4
f 3 5
f 4 6
e 1 2
3
記下每個人的敵人,如果遇到敵人,就和敵人的敵人合併,如果遇到朋友就直接合併
#include
#include
#include
using
namespace std;
int n,m,p,q,x1,y1,pd,ans,a[
1005][
1005
],dad[
1005];
char x;
intfind
(int dep)
//並查集
intmain()
else
for(
int j=
1;j<=a[q][0
];++j)
//反過來也要
a[p]
[++a[p][0
]]=q;//記下來
a[q]
[++a[q][0
]]=p;}
}for
(int i=
1;i<=n;
++i)
if(pd) ans++;}
printf
("%d"
,ans)
;}
團夥 並查集 團夥 並查集
題目描述 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。輸入輸出格式 輸入格式 ...
團夥 並查集 並查集 團夥
2 n 1000 1 m 5000 1 p q n 試題分析 這種問題我們一般有兩種解法 打標記 多個並查集 打標記這類方法會在銀河英雄傳說中看到 那麼多個並查集如何解決呢?我們設1 n節點是記錄朋友,n 1 2 n節點是記錄敵人 既然兩個人是朋友,根據題意,我們也要把他們的敵人合起來 如果兩個人是...
並查集 團夥
題號 zhoj1258 思路 並查集。給每個人建立乙個 正集 朋友 乙個 反集 敵人 反集要麼為空 要麼指向乙個正集,維護這兩類集合,最後統計 正集 的個數。1 include2 include3 const int n 1000 4 intans 5class unionfindset 14 15...