並查集 月亮之眼

2021-10-05 13:07:54 字數 1907 閱讀 5954

月亮之眼

描述

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

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

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

格式

輸入格式

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

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

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

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

輸出格式

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

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

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

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

樣例1

樣例輸入1

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

樣例輸出1

2510

0456

95

#include

#include

#define maxn 505

using

namespace std;

int p[maxn]

, v[maxn]

, n, m;

//v表示距離根節點的距離,p表示父節點是誰

intfind

(int x)

intmerg

(int x,

int y,

int l)

else

if(v[x]

+ l != v[y]

)//因為繩子是緊繃的,所以應該相加相等

return-1

;return1;

}int

main()

}for

(int i =

1; i <= m; i++

)find

(i);

//重新計算他們的跟?

for(

int i =

1; i <= m; i++

)printf

("%d\n"

, v[i]);

return0;

}

vijos 1540 月亮之眼 並查集

題目 吉兒是一家古董店的老闆娘,由於她經營有道,小店開得紅紅火火。昨天,吉兒無意之中得到了散落民間幾百年的珍寶 月亮之眼。吉兒深知 月亮之眼 價值連城 它是由許多珍珠相連而成的,工匠們用金線連線珍珠,每根金線連線兩個珍珠 同時又對每根金線染上兩種顏色,一半染成銀白色,一半染成黛黑色。由於吉兒自小熟讀...

CTSC1999 帶權並查集 月亮之眼

description 吉兒是一家古董店的老闆娘,由於她經營有道,小店開得紅紅火火。昨天,吉兒無意之中得到了散落民間幾百年的珍寶 月亮之眼。吉兒深知 月亮之眼 價值連城 它是由許多珍珠相連而成的,工匠們用金線連線珍珠,每根金線連線兩個珍珠 同時又對每根金線染上兩種顏色,一半染成銀白色,一半染成黛黑色...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...