CTSC1999 帶權並查集 月亮之眼

2022-06-04 15:39:12 字數 2557 閱讀 1385

description

吉兒是一家古董店的老闆娘,由於她經營有道,小店開得紅紅火火。昨天,吉兒無意之中得到了散落民間幾百年的珍寶—月亮之眼。吉兒深知「月亮之眼」價值連城:它是由許多珍珠相連而成的,工匠們用金線連線珍珠,每根金線連線兩個珍珠;同時又對每根金線染上兩種顏色,一半染成銀白色,一半染成黛黑色。由於吉兒自小熟讀古籍,所以還曉得「月亮之眼」的神秘傳說:「月亮之眼」原是乙個古代寺廟的寶物,原本是掛在佛堂的一根頂梁柱上的,整個寶物垂直懸掛,所有珍珠排成一線,且都鑲嵌在柱子裡,而每一根金線又都是繃緊的,並且金線的銀白色一端始終在黛黑色一端的上方;然而,在乙個月圓之夜,「月亮之眼」突然從柱裡飛出,掉落下來,寶物本身完好無損,只是僧侶們再也無法以原樣把「月亮之眼」嵌入柱子中了。吉兒望著這個神秘的寶物,回憶著童年讀到的傳說,頓時萌發出恢復「月亮之眼」的衝動,但是擺弄了幾天依舊沒有成功。

現在,要麻煩您來幫助吉兒完成這項使命。

您要設計乙個程式,對於給定的「月亮之眼」進行周密分析,然後給出這串寶物幾百年前嵌在佛堂頂梁柱上的排列模樣。給定的「月亮之眼」有n個珍珠和p根金線,所有珍珠按一定順序有了乙個序號:1、2…、n。

input

輸入資料報含乙個「月亮之眼」的特徵描述:

檔案第一行有兩個整數n和p,其中n表示寶物中的珍珠個數,p表示寶物中的金線根數;

以下p行描述珍珠連線情況:

檔案第i+1行有三個整數,ri1,ri2,li。其中ri1表示第i根金線的銀白色一端連線的珍珠序號;ri2表示第i根金線的黛黑色一端連線的珍珠序號;li表示第i根金線的長度。

output

由於珍珠尺寸很小,所以幾個珍珠可以同時鑲嵌在乙個位置上。

您的輸出資料描述的是「月亮之眼」各個珍珠在頂梁柱上的位置,輸出檔案共n行:

第i行,乙個整數s,它表示標號為i的珍珠在頂梁柱上距離最高位置珍珠的距離。

注意:若無解則輸出僅一行,包含乙個整數「-1」。

sample input

9 9

1 2 3

2 3 5

2 7 1

4 5 4

5 6 1

5 9 1

6 7 1

7 8 3

9 8 4

sample output

2510

0456

95

hint引數限定

1<=n<=255

樣例說明:

我們把輸入依次投射出來,從左到右,具體如下圖:

題意有些難懂 但結合就不難理解了

因為輸出只是離最高的珠子的的距離 我們考慮帶權的並查集並採用路徑壓縮

對於一對珠子 x y x在y上方 距離為z 當xy不在同一並查集時

則有兩種情況

一種在x並查集的樹根xx到y的距離大於在y的並查集的樹根yy到y的距離 (即在這條直線上 xx 高於 yy)

此時連線x——y 與 連線xx——yy同理  距離為 xx到y距離去yy到y的距離(d[x] + z - d[y])

同理 當yy高於xx也是同理      距離為 yy到y距離去xx到y的距離(-d[x] - s + d[y])

當xy在同一並查集時 則必有x y 到樹根距離為z 否則不能繃直或連線

貼**

#include#include

#define ll long long

#define f(a,b) for(long long i = (a); i <= (b); i++)

using

namespace

std;

long

long

n,m,sum;

long

long fa[1000],d[3000

];long

long

begin,final,value,x,y;

void merge(long

long xx,long

long yy,long

long

sum)

long

long

get(long

long

x)int

main()

if(d[x] + value >= d[y]) merge(y_father,x_father,d[x] + value -d[y]);

if(d[x] + value < d[y]) merge(x_father,y_father,d[y] - value -d[x]);}f(

1,n)

long

long qwq = get

(i);

f(1,n)cout << d[i]<

}

view code

並查集,帶權並查集

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

帶權並查集

食物鏈 time limit 1000ms memory limit 10000k total submissions 71395 accepted 21146 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...

帶權並查集 then

問題 b 便 時間限制 2 sec 記憶體限制 512 mb 提交 50 解決 14 題目描述 給出乙個r c的棋盤.共有r行c列,r c個格仔.現要在每個格仔都填乙個非負整數.使得任意乙個2 2的正方形區域都滿足這樣的性質 左上角的數字 右下角的數字 左下角的數字 右上角的數字.有些格仔已經確定,...