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