檔案傳輸 (25 分)(並查集)

2021-09-02 18:32:11 字數 1623 閱讀 8742

當兩台計算機雙向連通的時候,檔案是可以在兩台機器間傳輸的。給定一套計算機網路,請你判斷任意兩台指定的計算機之間能否傳輸檔案?

首先在第一行給出網路中計算機的總數 n (2≤n≤10​4​​),於是我們假設這些計算機從 1 到 n 編號。隨後每行輸入按以下格式給出:

i c1 c2
其中i表示在計算機c1c2之間加入連線,使它們連通;或者是

c c1 c2
其中c表示查詢計算機c1c2之間能否傳輸檔案;又或者是

s
這裡s表示輸入終止。

對每個c開頭的查詢,如果c1c2之間可以傳輸檔案,就在一行中輸出"yes",否則輸出"no"。當讀到終止符時,在一行中輸出"the network is connected."如果網路中所有計算機之間都能傳輸檔案;或者輸出"there arekcomponents.",其中k是網路中連通集的個數。

5

c 3 2

i 3 2

c 1 5

i 4 5

i 2 4

c 3 5

s

no

noyes

there are 2 components.

5

c 3 2

i 3 2

c 1 5

i 4 5

i 2 4

c 3 5

i 1 3

c 1 5

s

no

noyes

yesthe network is connected.

注意:

1.當遇到i時,將x與y合併,我們可以按照將第乙個計算機當做祖先的順序合併;

2.遇到c時,判斷一下find(x)與find(y)是不是相同就可以了

3.遇到s時,這個時候,我們要判斷從1到n是不是全部在乙個集合裡面

for(int i=1; i<=n; i++) find(i);//過濾一遍找到每個計算機的祖先

for(int i=1; i<=n; i++) sum[pre[i]]++;//計算以i為祖先的計算機的個數

for(int i=1; i<=n; i++) ans=max(ans,sum[i]);//找到最大的個數

if(ans==n)

void merge(int x,int y)

int main() else if(c=='c') else

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

if(find(i)==i) cnt++;

printf("there are %d components.\n",cnt);

break;

} }return 0;

}

並查集 7 2 檔案傳輸(25 分)

首先在第一行給出網路中計算機的總數 n 2 n 10 4 於是我們假設這些計算機從 1 到 n 編號。隨後每行輸入按以下格式給出 i c1 c2其中i表示在計算機c1和c2之間加入連線,使它們連通 或者是 c c1 c2其中c表示查詢計算機c1和c2之間能否傳輸檔案 又或者是 s這裡s表示輸入終止。...

PAT 檔案傳輸(並查集)

首先在第一行給出網路中計算機的總數 n 2 n 10 4 於是我們假設這些計算機從 1 到 n 編號。隨後每行輸入按以下格式給出 i c1 c2其中i表示在計算機c1和c2之間加入連線,使它們連通 或者是 c c1 c2其中c表示查詢計算機c1和c2之間能否傳輸檔案 又或者是 s這裡s表示輸入終止。...

檔案傳輸 (25 分)

當兩台計算機雙向連通的時候,檔案是可以在兩台機器間傳輸的。給定一套計算機網路,請你判斷任意兩台指定的計算機之間能否傳輸檔案?首先在第一行給出網路中計算機的總數 n 2 n 10 4 於是我們假設這些計算機從 1 到 n 編號。隨後每行輸入按以下格式給出 i c1 c2其中i表示在計算機c1和c2之間...