• UVA


    https://odzkskevi.qnssl.com/8b9d8bb43198f28efe782047d56ab361?v=1501987995

     1 /*
     2 题目大意:一个树上有n个节点,n-1条边,每个节点上有一个颜色
     3 现要求选取其中一个节点为根,要求子树的颜色相同,问是否能够达到要求。
     4 题目分析:两个有共同边的节点,如果颜色不一样,那么肯定会有其中一个点选为根
     5 记录这个点的度+1,总的counts+1,最后遍历数组,找出度和counts的大小相同的点并输出
     6 如果没有即是不能达到要求。
     7 */
     8 #include <cstdio>
     9 #include <cstring>
    10 using namespace std;
    11 int const maxn =  100005;
    12 struct node{
    13     int u,v;
    14 }a[maxn];
    15 int c[maxn];
    16 int degree[maxn];
    17 int main(){
    18     int n;
    19     scanf("%d",&n);
    20     for(int i=1;i<n;i++)
    21         scanf("%d%d",&a[i].u ,&a[i].v );
    22     for(int i=1;i<=n;i++) scanf("%d",&c[i]);
    23     int counts=0;
    24     memset(degree,0,sizeof(degree));
    25     for(int i=1;i<n;i++){
    26         if(c[a[i].u]!=c[a[i].v]){
    27             counts++;
    28             degree[a[i].u ]++;
    29             degree[a[i].v ]++;
    30         }
    31     }
    32     for(int i=1;i<=n;i++){
    33         if(counts==degree[i]){
    34             printf("YES
    %d
    ",i);
    35             return 0;
    36         }
    37     }
    38     printf("NO
    ");
    39     return 0;
    40 }
    41 /////Runtime error on test
    42 #include <iostream>
    43 #include <stdio.h>
    44 #include <string.h>
    45 using namespace std;
    46 const int maxn=100005;
    47 struct node {
    48     int u,v;
    49 }a[maxn];
    50 int c[maxn],degree[maxn];
    51 int main(){
    52     int n;
    53     scanf("%d",&n);
    54     for(int i=1;i<n;i++)
    55         scanf("%d%d",&a[i].u,&a[i].v);
    56     for(int i=1;i<=n;i++)
    57     scanf("%d",&c[i]);
    58     int ans=0;
    59     memset(degree,0,sizeof(degree));
    60     for(int i=1;i<n;i++){
    61         if(c[a[i].u]!=c[a[i].v]){
    62             ans++;
    63             degree[a[i].u]++;
    64             degree[a[i].v]++;
    65         }
    66     }
    67     for(int i=1;i<=n;i++){
    68         if(ans==degree[i]){
    69         printf("YES
    %d
    ",i);
    70         return 0;
    71         }
    72     }
    73         printf("NO
    ");
    74         return 0;
    75 }
  • 相关阅读:
    地狱少女....
    火影忍者&nbsp;是时候结束了
    1942
    待查
    什么是傻瓜
    公车艳遇
    初一
    继承
    第四周学习笔记
    查找里程————mooc《面向对象程序设计——Java语言》-(浙大翁凯)第三周编程题
  • 原文地址:https://www.cnblogs.com/z-712/p/7324410.html
Copyright © 2020-2023  润新知