AtCoder ContextABC 126 D Even Relation(偶項關聯)

題目
已知擁有N個頂點的樹。該樹的第i條邊上的兩個節點是ui和vi,長度爲wi。你須要在知足如下的條件下,將樹上的全部節點塗上黑色和白色。(能夠將全部的頂點都塗上一樣的顏色)。html

要求
全部塗有相同顏色的節點,它們之間的距離必須是偶數node

條件python

  • 全部輸入的數都爲整數
  • 1<=N<=100000
  • 1<=ui<=vi<=N
  • 1<=Wi<=1000000000

輸入
要求如下面的方式輸入算法

N
u1 v1 w1
u2 v2 w2
.
.
.
uN-1 vN-1 wN-1

輸出
把知足題目條件的N個點的塗鴉狀況一行一行地輸出。
對於i行的話,頂點i是白色的話輸出0,頂點i是黑色的話,輸出1
若是知足條件的狀況有多個的話,輸出任意一種均可以app

例1
輸入測試

3
1 2 2
2 3 1

輸出ui

0
0
1

例2
輸入spa

5
2 5 2
2 3 10
1 3 8
3 4 2

輸出3d

1
0
1
0
1

解題思路code

讀懂題目

首先對於例2來講,樹是長這樣的
樹.png

能夠看到有5個頂點,4條線。條件中也能夠看出有N個頂點,N-1條線。也就是說,不可能造成一個封閉的環路!

點個點之間距離的計算方法
對於點5和點4的距離。咱們能夠看到距離是2+10+2=14
這是咱們直觀的解法
可是天然界中還存在另一個解法
點5和點4的距離P,能夠看做
A:點1到點5的距離
B:點1到點4的距離
C:點1到點3的距離

P = A+B-2*C

這裏
A = 8+10+2
B = 8+2
C = 8
P = 20 + 10 - 2*8 = 14

這裏的C是4,5的父節點。

咱們能夠取任意一個點爲頂點
這裏咱們取點1爲頂點
若是咱們取3爲頂點的話,會獲得一樣的結果

點和點之間的距離公式化
咱們選擇頂點爲P
計算點A和點B的距離

推斷1.png

推斷2.png

咱們能夠由上圖看到,
A到B的距離=PA+PB -2*PC
其中2*PC一定是偶數,這在求奇偶性的時候能夠忽略
A,B兩個點之間的距離若是要求是偶數,那麼要麼PA,PB爲偶,要麼PA,PB爲奇。

咱們能夠規定
PA,PB都爲偶數的時候,A,B爲白色
PA,PB都爲奇數的時候,A,B爲黑色
或者
PA,PB都爲偶數的時候,A,B爲黑色
PA,PB都爲奇數的時候,A,B爲白色

這樣就能知足同色節點之間的距離是偶數這樣的要求了

求每一個節點到頂點的距離
咱們規定第一個點位頂點,求每一個點離第一個點距離
這裏要用到dfs算法
關於dfs算法,這篇文章有詳細的描述。這裏就再也不過多敘述了
簡單來講就是要遞歸

BFS和DFS算法

代碼

import sys
sys.setrecursionlimit(20000000)
def prepare(n,arr):
    nodeArr = [[] for i in range(n)]
    for ar in arr:
        nodeArr[ar[0]-1].append([ar[1]-1,ar[2]])
        nodeArr[ar[1]-1].append([ar[0]-1,ar[2]])
    return nodeArr

def dfs(currentNode,distance):
    res[currentNode] = distance
    for next in nodeArr[currentNode]:
        nextNode = next[0]
        nextNodeDistance = next[1]
        if res[nextNode] == -1:
            dfs(nextNode,distance + nextNodeDistance)


n = int(input())

arr = []

for i in range(n-1):
    arr.append([int(s) for s in input().split(" ")])

nodeArr = prepare(n, arr)


if n == 1:
    print(1)
else:
    res = [-1 for i in range(n)]

    dfs(0,0)

    result = [(re % 2) for re in res]

    for re in res:
        print(re % 2)

題外話

sys.setrecursionlimit(20000000)

這個不加的話,Atcoder提交測試的時候runtime error的報錯

相關文章
相關標籤/搜索