Codeforces 764C或763A Timofey and a tree 【好题】

来源:互联网 发布:淘宝客导购网站有哪些 编辑:程序博客网 时间:2024/06/04 18:50

题目链接:http://codeforces.com/contest/764/problem/C


题意:

有一棵 n 结点的树,每个结点都有一个颜色(c[i]),现要求删除其中一个点,使得其它有边点的颜色相同。

题解:

刚开始认为是广搜,后来看了题解(QWQ),才发现好巧妙啊。

我们可以先将有边的,颜色不相同的点的度+1,计数器+1.

最后扫描一下数组,如果数组值与计数器的值相同,说明截去这个点其它的树的点的颜色相同。输出yes并输出点的index

否则输出 no


代码:

#include <cstdio>const int size = 1e5+5;int n;int c[size], degree[size], high;struct _conn{ int u, v;}conn[size];int main() {scanf("%d", &n);for ( int i = 0; i < n-1; i ++ ) scanf("%d %d", &conn[i].u, &conn[i].v);for( int i =1; i <= n; i ++ ) scanf("%d", &c[i]);for ( int i = 0; i < n-1; i ++ ) {if(c[conn[i].u] != c[conn[i].v]) {high ++;degree[conn[i].u] ++;degree[conn[i].v] ++;}}for ( int i = 1; i <= n; i ++ ) {if(degree[i] == high) { printf("YES\n%d\n", i); return 0;}}puts("NO");return 0;}


0 0
原创粉丝点击