CF763A Timofey and a tree(思维)

简介: CF763A Timofey and a tree(思维)

现在有一个无根树,我们加入把其中的一个结点看做根,那么这个根上的每一个子树中都不能有一个结点的颜色不同,如果都相同,那么此时就是合法的,我们输出YES及这个结点。如果不存这样的根,那么输出NO。


思路:

因为如果一个树的子树中只要有一个点与这个子树中的其他点颜色不同,那么这样主角就会生气,所以这样只有一种情况是合法的,就是当这个无根树的某个结点作为根时,其连接到的结点与根的颜色不一样的个数等于所有结点与这个根颜色不同的结点个数。(有点绕,耐心理解-)。因为子树中一旦出现某个结点与其他结点颜色不同就会造成整个树不合法。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int a[maxn], b[maxn], cnt[maxn], col[maxn];
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    cin >> a[i] >> b[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> col[i];
  }
  int res = 0;
  for (int i = 1; i <= n - 1; i++) {
    if (col[a[i]] != col[b[i]]) { //相邻节点的颜色不同()
      cnt[a[i]]++; cnt[b[i]]++; res++;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (cnt[i] == res) {
      cout << "YES" << endl;
      cout << i << endl;
      return 0;
    }
  }
  cout << "NO" << endl;
  return 0;
}
相关文章
|
18天前
|
存储 算法
树(Tree) - 概念与基础
树(Tree) - 概念与基础
18 2
|
18天前
|
缓存 索引
图解B Tree和B+ Tree
图解B Tree和B+ Tree
30 0
|
11月前
|
存储 数据库 索引
B-Tree和B+Tree的区别及各自的优势
B-Tree和B+Tree的区别及各自的优势
235 0
|
11月前
|
JSON JavaScript Go
Tree资源树的实战研究
最近小编在做项目的时候,遇到了一个动态添加资源树的问题,经过几番实践,终于实现了最终的结果,下面我会将自己的经历一点点抛给大家,希望读者尽情享受这顿盛宴。
|
11月前
|
机器学习/深度学习
CF2A Winner(map+思维)
CF2A Winner(map+思维)
69 0
|
11月前
|
缓存 JavaScript API
Node冷门知识点——require('node:path')
今天在看Vite的源码时候,发现有个用法很神奇
133 0
CF1567C. Carrying Conundrum(思维)
CF1567C. Carrying Conundrum(思维)
79 0
|
人工智能
CF1573B. Swaps(思维)
CF1573B. Swaps(思维)
68 0
CF 1156D. 0-1-Tree(树形DP)
CF 1156D. 0-1-Tree(树形DP)
80 0
CF817C.Really Big Numbers(二分 思维)
CF817C.Really Big Numbers(二分 思维)
52 0

热门文章

最新文章