UVA1329 合作網路 解題報告

2021-07-14 20:57:22 字數 1101 閱讀 7744

【問題描述】  

有n個結點(編號為1..n),初始時每個結點的父親都不存在。你的任務是執行一次i操作和e操作,格式如下: 

i u v:把節點u的父親點設定為v,距離為|u-v|除以1000的餘數。輸入保證執行指令前u沒有父親節點。 

e u:詢問u 到根接點的距離(輸出距離 mod 1000的結果)。

【輸入格式】  

輸入第一行為測試資料組數t。每組資料第一行為n(5<=n<=20 000)。接下來有不超過20000行,每一行一條指令,以"o"結尾。i指令的個數不小於n。

【輸出格式】  

對於每條e指令,輸出查詢結果(輸出距離 mod 1000的結果)。

【輸入樣例】   14

e 3i 3 1

e 3i 1 2

e 3i 2 4

e 3o 

【輸出樣例】  02

35【資料範圍】  

5≤n≤20000

【**】  

《大白書》192頁 uva 1329

解題思路:該題是一道典型的使用並查集解決的問題。根據題意,並查集中需要記錄結點的父親和結點到父親的距離(為了方便之後的運算)。當把節點u的父親設定成v時,直接計算出它們的距離存進陣列中。需要注意的是,為了節省時間,在並查集的查詢中進行了路徑壓縮(使得乙個集合中的每個元素的父親都為根結點),在壓縮的同時,結點到父親的距離也要改變。

#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn=20005;

int t,n,u,v;

char s[10];

int pa[maxn],d[maxn]; //d[i] i到父親的距離

void initial()

void bing(int u,int v)

int find(int x)

int main()

if(s[0]=='e')

scanf("%s",s);

} }return 0;

}

《大白書》192頁 uva 1329 合作網路

問題描述 有n個結點 編號為1.n 初始時每個結點的父親都不存在。你的任務是執行一次i操作和e操作,格式如下 i u v 把節點u的父親點設定為v,距離為 u v 除以1000的餘數。輸入保證執行指令前u沒有父親節點。e u 詢問u 到根接點的距離 輸出距離 mod 1000的結果 輸入格式 輸入第...

UVA 11825 集合列舉 狀態壓縮 dp

列舉子集的飄逸寫法 這個裡面先處理出來選擇某台計算機可以覆蓋到的計算機的範圍。選擇某個計算機集合可以覆蓋到的計算機的範圍 dp s 代表選擇某個計算機集合,最多可以覆蓋多少次全集。dp s max dp s dp s0 s 1 s0 是s 的子集,s0 s 是s0 在 s 中的補集。include ...

UVa 12096 集合棧計算機

這題的話,我們讀入操作之後,首先對於空集就是初始化為空。我們可以使用typedef 對於 set 重新命名為set,這樣就可以直接用set 的語法進行空集的初始化了。這題主要是對於集合的處理,我們可以給集合乙個對映函式,這個函式對於已知集合就返回該id,讓主函式進行相應的操作。對於未知集合就按序存入...