POJ1182食物鏈,HDU1829(種類並查集)

2022-09-13 20:33:24 字數 2315 閱讀 3332

食物鏈

time limit:1000ms

memory limit:10000k

total submissions:55882

accepted:16377

description

動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a**, b吃c,c吃a。

現有n個動物,以1-n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。

有人用兩種說法對這n個動物所構成的食物鏈關係進行描述:

第一種說法是"1 x y",表示x和y是同類。

第二種說法是"2 x y",表示x吃y。

此人對n個動物,用上述兩種說法,一句接一句地說出k句話,這k句話有的是真的,有的是假的。當一句話滿足下列三條之一時,這句話就是假話,否則就是真話。

1) 當前的話與前面的某些真的話衝突,就是假話;

2) 當前的話中x或y比n大,就是假話;

3) 當前的話表示x吃x,就是假話。

你的任務是根據給定的n(1 <= n <= 50,000)和k句話(0 <= k <= 100,000),輸出假話的總數。

input

第一行是兩個整數n和k,以乙個空格分隔。

以下k行每行是三個正整數 d,x,y,兩數之間用乙個空格隔開,其中d表示說法的種類。

若d=1,則表示x和y是同類。

若d=2,則表示x吃y。

output

只有乙個整數,表示假話的數目。

sample input

100 7

1 101 1

2 1 2

2 2 3

2 3 3

1 1 3

2 3 1

1 5 5

sample output

3
source

noi 01

以食物鏈為例,並查集是維護屬於同一組的資料結構,但是本題不只有同一組,還有捕食關係。

對每只動物建立三個元素 i-a i-b i-c,用3 x n個元素建立並查集。

i - x 表示 i 屬於種類x

並查集的每乙個組,表示組裡所有元素代表的情況,同時發生或者同時不發生

例如 如果 i-a j - b在乙個集合裡,說明 i 屬於a的同時 j一定屬於b,

所以對應題目中的兩種情況,

1 x ,y屬於同一種類,那麼我們就合併 x-a y-a , x-b y-b , x-c y-c;

2 x吃 y ,那麼我們就合併 x-a y-b , x-b y-c , x-c y-a;

當然合併的時候要進行判斷是否有矛盾,具體來看**吧

以上參照了挑戰程式設計競賽

【原始碼】

#include#includeusing namespace std;

const int maxn = 50000 + 10l;

int father[maxn * 3];

int find(int x)

void union(int x,int y)

bool same(int x,int y)

int main()

if(t == 1)

}else

}// cout<

hdu1829

給出 一對一對蟲子的關係,可能是 公-母 也可能是 母-公

判斷給出的關係對會不會出現同性的情況。

同樣可以用上面的方法,對於每種關係 建立兩個集合 union(x,y+n) union(y,x+n)

這兩個集合有乙個是真的。

然後在每次合併之前檢查 x,y是否在同一集合即可,如果在同一集合就輸出找到錯誤。

【原始碼】

#include#includeusing namespace std;

const int maxn = 2000 + 10l;

int father[maxn * 3];

int find(int x)

void union(int x,int y)

bool same(int x,int y)

int main()

int i;

int fla = 0;

for(i=1;i<=n;i++)

}} printf("scenario #%d:\n", ++kase); //因為少了這句!! t^t

if(!fla)

cout<<"no suspicious bugs found!"<

POJ 1182 食物鏈 Union Find題解

union find就是所謂的並查集。本題做的很無語,最後發現居然是輸入搞錯,一直wa。不能使用迴圈接受輸入,否則是wa的,氣死人,浪費那麼多時間就為了這個。難點 1 構建關係樹 2 構建公式 3 快速更新公式 要抽象思維出什麼對應什麼的關係和上面是逆關係,就是利用0,1,2構建出父子節點之間的關係...

POJ 1182 食物鏈 解題報告

食物鏈 time limit 1000ms memory limit 10000k total submissions 70529 accepted 20875 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...

POJ 1182 食物鏈 並查集

此題利用並查集解決。對於每只動物i建立3個元素i a,i b,i c,並用這3 n個元素建立並查集。1 i x表示 i屬於種類x 2 並查集你的每一組表示組內所有元素代表的情況同時發生或不發生。對於每一條資訊,只需要按照下列操作即可 1.第一種 x,y同類,合併x a和y a x b和y b x c...