杭电1325java实现
題目鏈接
問題描述
樹是一個眾所周知的數(shù)據(jù)結(jié)構(gòu),它可以是空的(null,void,nothing),也可以是一組由節(jié)點之間的有向邊連接起來的一個或多個節(jié)點,滿足以下屬性。
只有一個節(jié)點稱為根,沒有有向邊指向它。
除根之外的每個節(jié)點都只有一條邊指向它。
從根到每個節(jié)點有一個唯一的有向邊序列。
例如,請考慮下面的插圖,其中節(jié)點用圓圈表示,邊用箭頭表示。前兩個是樹,但最后一個不是。
在這個問題中,將給出幾個由有向邊連接的節(jié)點集合的描述。對于其中的每一個,您將確定集合是否滿足樹的定義。
輸入
輸入將由一系列描述(測試用例)組成,后跟一對負(fù)整數(shù)。每個測試用例將包含一系列邊緣描述,后跟一對零。每個邊緣描述將由一對整數(shù)組成;第一個整數(shù)標(biāo)識邊緣從其開始的節(jié)點,第二個整數(shù)標(biāo)識邊緣指向的節(jié)點。節(jié)點號總是大于零。
輸出
對于每個測試用例,顯示行“Case k是一棵樹”或行“Case k不是樹”,其中k對應(yīng)于測試用例編號(它們從1開始按順序編號)。
Sample Input
6 8 5 3 5 2 6 4
5 6 0 0
8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0
3 8 6 8 6 4
5 3 5 6 5 2 0 0
-1 -1
Sample Output
Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree.
雖然是并查集的運用,但是還是有一點不一樣的,這個樹的合并不僅僅是兩棵樹的合并,他是有順序的,輸入a,b,樹就是a為根,b為子,不僅僅如此,還有一點很重要的就是一個節(jié)點可以指向很多節(jié)點,然而只能有一個節(jié)點指向它,也就是說插入(a,b)中b的根節(jié)點必須是b,如果不滿足那么就不是該條件的tree,同時,還要滿足普通樹的無聯(lián)通,不分離(一棵樹)。成不成樹我是用boolean值判斷,最后只需判斷隨便一個節(jié)點的樹的路徑數(shù)是否等于該有的路徑樹。
下面附上代碼(注意(0,0)要單獨處理)
本人小白,優(yōu)化和復(fù)雜優(yōu)化的不夠好,請大佬指出。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的杭电1325java实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杭电1232 畅通工程
- 下一篇: sevlet表单处理无法相应问题及web