帶權並查集
題目大義:給你n個點,再給你m條垂直或水平的邊,每條邊分別連著兩個點,接下來會有k個詢問,每個詢問包含三個資料:u,v
,i
u,v,i
u,v,
i,表示在 第i條邊輸入後能不能將u,v之間的距離計算出來,如果可以計算,就輸出u,v之間的曼哈頓距離:∣x1
−x2∣
+∣y1
−y2∣
|x1-x2|+|y1-y2|
∣x1−x2
∣+∣y
1−y2
∣,否則就輸出:-1.可見,如果當前詢問的兩個點有關係就可以計算出來,那該如何快速判斷這兩個點有關係呢,因此我們想到並查集,其中邊就代表著這兩個點有關係,又考慮到本題的詢問的i值可能會雜亂無章,耗費時間,因此我們可以將詢問進行離線操作.
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
40005
;int n,m,k;
struct nodeq[maxn]
;//儲存輸入的邊
struct resulte[maxn]
;//儲存結果
bool
cmp(result a,result b)
struct question
//過載<
}w[maxn]
;struct gatherg[maxn]
;//儲存每個點的座標和它的父節點
void
init()
//初始化每個節點的父節點都是自己,座標都設定為原點,你也可以設定為其它
}int
finds
(int x)
//帶權並查集的路徑壓縮,不要搞錯語句的次序
void
join
(int u,
int v,
int length,
char s)
}int
main()
sort
(e,e+k,cmp)
;//恢復原來的1詢問次序
for(
int i=
0;i)return0;
}.```
poj1984(帶權並查集)
題意 給定n個farm,m條邊連線farm,k組詢問,詢問根據前t3條邊求t1到t2的曼哈頓距離,若不可求則輸出 1。思路 類似與poj1182,也是並查集的向量運用。用root i 表示farm i的祖先,x i y i 分別表示i到其祖先的曼哈頓距離的橫縱座標,這裡離線化先儲存邊的資訊,在詢問的...
並查集,帶權並查集
題意 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是...