首先在第一行給出網路中計算機的總數 n (
2≤n≤
104
),於是我們假設這些計算機從 1 到
n 編號。隨後每行輸入按以下格式給出:
i c1 c2
其中i
表示在計算機c1
和c2
之間加入連線,使它們連通;或者是
c c1 c2
其中c
表示查詢計算機c1
和c2
之間能否傳輸檔案;又或者是
s
這裡s
表示輸入終止。
對每個c
開頭的查詢,如果c1
和c2
之間可以傳輸檔案,就在一行中輸出"yes",否則輸出"no"。當讀到終止符時,在一行中輸出"the network is connected."如果網路中所有計算機之間都能傳輸檔案;或者輸出"there arek
components.",其中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.
並查集問題,邊並邊查,ac**如下:
#include#define max 20020
using namespace std;
int f[max];
void init(int n)
int getf(int v)
}void marge(int v,int u)
}int main()
else
}for(int i = 1;i <= n; i++)
if(count == 1)
cout <<"the network is connected."
cout <<"there are "
}
檔案傳輸 (25 分)(並查集)
當兩台計算機雙向連通的時候,檔案是可以在兩台機器間傳輸的。給定一套計算機網路,請你判斷任意兩台指定的計算機之間能否傳輸檔案?首先在第一行給出網路中計算機的總數 n 2 n 10 4 於是我們假設這些計算機從 1 到 n 編號。隨後每行輸入按以下格式給出 i c1 c2其中i表示在計算機c1和c2之間...
並查集 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甲級1107 並查集
並查集在findfather 函式中進行壓縮路徑,陷阱是這裡只壓縮該結點以上到根的路徑,其以下的路徑不壓縮,這裡不搞清楚會有三個測試點過不去 include include include using namespace std int n vector int hobby 1001 int fat...