戰爭聯盟(並查集)

2022-09-03 16:48:19 字數 1503 閱讀 8372

我不知道第三次世界大戰用的是什麼**,但我知道第四次世界大戰時用的石頭和木棍。

--愛因斯坦

在某個平行宇宙中,最糟糕的情況發生了,第三次世界大戰一觸即發!這個時候地球上的

n個國家,已經完全的分為了兩個陣營,紅色陣營和藍色陣營。為了能夠使得兩方陣營能夠和解,為了人類最終的命運不是核爆輻射,聯合國正在採取各種各樣的方式和手段促使雙方陣營和解。

聯合國首先要搞清楚乙個問題,每乙個國家都屬於哪一方陣營。因為各方政治利益的權衡,所以絕大多數國家,並沒有直接表態,自己屬於哪個陣營。如今,聯合國情報局獲得了一些資訊,每條資訊包含兩個國家的編號,表示這兩個國家屬於不同的陣營(情報正確無誤)。憑藉著現有這些零碎的資訊,再給出任意兩個國家的編號,能否確定他們屬於同一方陣營呢?

假設此時地球上有

n個國家(2≤n≤10 ^ 5),國家的編號從1到n,每個國家不是屬於紅色陣營,就是屬於藍色正營。你將依次得到m條指令(2≤m≤10 ^ 5),這指令將只有以下兩種情況:

1. d a b

a和b分別代表兩個國家的編號。這一條指令的意思是a和b屬於不同的陣營。

2. a a b

a和b分別代表兩個國家的編號。這一條指令的意思是,根據之前的所有指令,你要準確的判斷出a和b是否屬於同乙個陣營。

輸入的第一行包含乙個整數t(1 < =t < = 20),測試用例的數量。然後t組例子如下。每個測試用例以兩個整數n和m開頭,代表n個國家,後跟m行指令,每個行包含如上所述的一條訊息。

對於每一條a a b的指令,你的程式都應該根據之前得到的資訊做出準確判斷。

如果屬於同一陣營,輸出「belong to same group.」

如果不屬於同一陣營,輸出「belong to different group.」

如果不確定,輸出「not sure yet.」

1

10 10

a 1 2

d 1 2

a 1 2

d 2 3

d 3 4

d 7 8

a 2 4

a 2 7

d 4 7

a 1 7

not sure yet.

belong to different group.

belong to same group.

not sure yet.

belong to same group.

ac:**

#include#include#include#includeusing namespace std;

const int maxn = (int)1e5+5;

int par[maxn],val[maxn];

void init(int n)

{ for(int i =0;i>t;

while(t--)

{int n,m;

cin>>n>>m;

init(n);

char a;

int b,c;

for(int i = 0;i題目鏈結點選開啟鏈結

4998 星球聯盟 LCT 並查集

description 在遙遠的s星系中一共有n個星球,編號為1 n。其中的一些星球決定組成聯盟,以方便相互間的交流。但是,組成聯盟的首要條件就是交通條件。初始時,在這n個星球間有m條太空隧道。每條太空隧道連線兩個星球,使得它們能夠相互到達。若兩個星球屬於同乙個聯盟,則必須存在一條環形線路經過這兩個...

並查集 codevs 1188City戰爭

我靠我不會 fop zz教我了半天我才會的 首先n n的暴力就是每條線段從兩個點dfs 然後把兩個點的值乘起來 2 這就是一條的值了 我們在考慮權值不同的情況 我們只要把邊從小到大排序然後用並查集維護就好了 但是如果邊權有相同的情況就不好搞了 有乙個想法 就是我們同乙個權值的邊一起加 對於一條邊,加...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...