【CF1188A1】Add On A tree

無神論者大祭司發表於2020-12-10

題目大意

給你棵樹,允許在兩個葉節點的路徑上的邊權上增加任何實數(初始值為0),問是否存在有限次操作,使每條邊權可以為任何值。
在這裡插入圖片描述

分析

對於上圖,我們發現無論如何1-3和2-7兩條邊的權值無論如何都是相等的,所以不行。通過模擬,我們發現如果有一個節點連兩條邊,就不符合情況,規律簡單模擬一下即可。給出簡略證明。
如果一個節點有兩條邊,肯定不是葉子節點,向下可以找到至少一個葉子節點,形成集合U如圖中7,向上可以找到其他的葉節點如4,5,6形成集合V。U,V交集為空。任意U中的的葉節點到V都只能經過剛剛找到的節點相連的兩條邊,所以這兩條邊邊權相等。

題目連結

傳送門

#include <iostream>
#include <algorithm>

using namespace std;
const int N = 2e5 + 10;
int rud[N], n;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(), cout.tie();
    cin >> n;
    for (int i = 0, x, y; i < n - 1; ++i) {
        cin >> x >> y;
        ++rud[x], ++rud[y];
    }

    bool flag = true;
    for (int i = 1; i <= n; ++i) {
        if (rud[i] == 2){
            flag = false;
            break;
        }
    }
    if (flag)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    return 0;
}