poj1984(帶權並查集)

2022-08-21 19:21:16 字數 767 閱讀 6354

題意:給定n個farm,m條邊連線farm,k組詢問,詢問根據前t3條邊求t1到t2的曼哈頓距離,若不可求則輸出-1。

思路:類似與poj1182,也是並查集的向量運用。用root[i]表示farm i的祖先,x[i],y[i]分別表示i到其祖先的曼哈頓距離的橫縱座標,這裡離線化先儲存邊的資訊,在詢問的時候更新邊的資訊,具體的合併操作時x[i],y[i]的運算手動推一下就明白了。

ac**:

1 #include2 #include3

using

namespace

std;45

const

int maxn=40005;6

struct

nodea[maxn];

1011

intn,m,k,root[maxn],x[maxn],y[maxn];

1213

int getr(int

kk)22}23

24int

main()

45 p=t3;

46int r1=getr(t1),r2=getr(t2);

47if(r1==r2)

48 printf("

%d\n

",abs(x[t1]-x[t2])+abs(y[t1]-y[t2]));

49else

50 printf("

-1\n");

51}52return0;

53 }

poj1984 帶權並查集 離線操作

帶權並查集 題目大義 給你n個點,再給你m條垂直或水平的邊,每條邊分別連著兩個點,接下來會有k個詢問,每個詢問包含三個資料 u,v i u,v,i u,v,i,表示在 第i條邊輸入後能不能將u,v之間的距離計算出來,如果可以計算,就輸出u,v之間的曼哈頓距離 x1 x2 y1 y2 x1 x2 y1...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

poj 1182 帶權並查集

description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是...