題意:給定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 #include3using
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是...