CF1188A1 1600 ——图论+思维 和1586类似

1586

1188

题意:

给一颗n个节点边权都为0的树,现在有一种操作可以任意选择这颗树上的两个叶子节点(度数为1的节点)使得这两个节点简单路径(没有重复节点的路径)上的边权加上一个任意实数,
问给定节点的连接关系形成一颗树,能否有限次使用上述操作使得树上的边权可以为任意实数(可能每一条边都不一样)

思路:

若存在点入度恰好为2,则这两条边值肯定是相同的,所以no

否则yes

// Decline is inevitable,
// Romance will last forever.
//#include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <deque>
#include <vector>
using namespace std;
#define mst(a, x) memset(a, x, sizeof(a))
#define INF 0x3f3f3f3f
//#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define ll long long
#define int long long
const int maxn = 2e5 + 10;
const int maxm = 1e3 + 10;
const int P = 1e4 + 7;
int n;
int deg[maxn];
void solve() {
    cin >> n;
    for(int i = 1; i<n; i++) {
        int u, v;
        cin >> u >> v;
        deg[u]++;
        deg[v]++;
    }
    for(int i =1; i <= n; i++) {
        if(deg[i] == 2) {
            cout << "NO\n";
            return;
        }
    }
    cout << "YES\n";
}
signed main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//    int T; scanf("%d", &T); while(T--)
//    freopen("1.txt","r",stdin);
//    freopen("output.txt","w",stdout);
//    int T; cin >> T;while(T--)
    solve();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_59273843/article/details/120832684
今日推荐