杭電1198 並差集

2021-09-24 01:37:55 字數 2192 閱讀 3569

原題傳送門,並差集模板函式簡單介紹,大佬的並差集詳解。

寫在題前:

因為最近學的並差集,因此專門搜的杭電並差集,也就是說,在看這個題之前我已經知道他是用並差集來做的。之前我碰到的題沒有涉及到二維這種情況,其實了解了思路還是很好做的,就是過程有點繁瑣,細節要注意。

解題步驟:

1、遍歷每個田地,對於每個田地,遍歷他上下左右的四塊田地,如果還沒有連線並且可以連線就將他們連起來。

2、再次遍歷每個田地,如果id[i]==i,說明這個田地是最上面的節點,得有乙個水井;如果不等,說明可以從其他的天地中獲得水。

寫在題後:

這道題沒坑!!!

ac**

# include

# include

# include

# include

# include

# include

# include

using namespace std;

const

int maxn =55;

int id[maxn *

101]

;int

fin(

int x)

void

meg(

int x,

int y)

bool same

(int x,

int y)

intmain()

}//注意初始化

vector s;

//用二維陣列s記錄輸入的資料

for(

int i =

0; i < m; i++

) vector >vs;

/* vs看上去是乙個三維陣列,但是你可以將他看做二維

因為每個string記錄的都是這個田地的水流的走向,

vs[12][34][0]表示第12行第34列田地的水流能不能通往上面,1:能,0:不能

vs[12][34][1]表示第12行第34列田地的水流能不能通往下面,1:能,0:不能

vs[12][34][2]表示第12行第34列田地的水流能不能通往左面,1:能,0:不能

vs[12][34][3]表示第12行第34列田地的水流能不能通往右面,1:能,0:不能

如果第12行第34列田地的字母為d,則vs[12][34]="0101",下,右可以,上,左不行。

如果輸入:

2 3adc

fjkvs的情況為:

0000 0000 0000 0000 0000

0000 1010 0101 0110 0000

0000 0011 1101 1111 0000

0000 0000 0000 0000 0000

值得注意的是,因為要遍歷每個節點上下左右的節點,如果是邊緣的點,判斷起來就會很麻煩(不判斷肯定越界啊)。

因此需要在原來的基礎上加一圈0000(0000代表水流無法從四個方向上流出,也就沒辦法和正常的節點連線)

*/vector strin;

for(

int i =

0; i < n +

2; i++

) vs.

push_back

(strin)

;//在第一排加上0000

for(

int i =

0; i < s.

size()

; i++

) k.

push_back

(t);

} k.

push_back

("0000");

//在最後一列加上0000

vs.push_back

(k);

} vs.

push_back

(strin)

;//在最後一行加上0000

for(

int i =

1; i < vs.

size()

-1; i++)}

int ans =0;

//記錄答案

//遍歷內圈的所有節點,如果是最大的父親,就讓ans加一。

for(

int i =

1; i < vs.

size()

-1; i++)}

} cout << ans << endl;

}return0;

}

杭電1272 並差集

原題傳送門,並差集模板詳解鏈結,大佬並差集詳解鏈結。解題思路 1 判斷是否有環 2 判斷所有的房子是否連在一起。第一點可以通過same函式判斷,在輸入的時候就可以判斷 第二點可以先通過vis陣列標記,然後遍歷vis陣列,當vis i 1並且id i i的時候,說明i是最上面的父親。再符合條件的情況下...

杭電1598 並差集

寫在題前 解題思路 將輸入的資料,按照速度的大小 從小到大 排序 依次將資料用meg函式建立關係,判斷查詢的資料是否符合 第一次符合條件的速度減去剛開始的速度就是答案。具體見 寫在題後 ac include include include include include include includ...

杭電3461 並差集

原題傳送門 寫在題前 剛開始怎麼看也不像是並差集,以為就是單純的邏輯題 萬物皆邏輯。嗯,真香 後來做不出來,仔細想想才發現這是並差集,隱藏的好深啊,其實理解之後就是乙個簡單的並差集,看 就知道。解題思路 前面 1 2 3 4 和1 4其實是重合的,有沒有這個資料都一樣,因此,1 4並不用計算在裡面。...