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;
}
相关文章
|
2月前
|
Shell
9-9|tree如何实现ll的效果
9-9|tree如何实现ll的效果
|
4月前
|
人工智能 BI
CF 1561 D. Up the Strip(数学+思维)
【7月更文挑战第5天】
51 10
|
5月前
CF 1538 G. Gift Set (贪心+思维)
【6月更文挑战第14天】
36 0
|
存储 数据库 索引
B-Tree和B+Tree的区别及各自的优势
B-Tree和B+Tree的区别及各自的优势
446 0
|
机器学习/深度学习
CF2A Winner(map+思维)
CF2A Winner(map+思维)
91 0
CF817C.Really Big Numbers(二分 思维)
CF817C.Really Big Numbers(二分 思维)
69 0
|
人工智能
CF1573B. Swaps(思维)
CF1573B. Swaps(思维)
91 0
CF1567C. Carrying Conundrum(思维)
CF1567C. Carrying Conundrum(思维)
92 0
CF 1156D. 0-1-Tree(树形DP)
CF 1156D. 0-1-Tree(树形DP)
102 0