• cf 763A. Timofey and a tree


    呵呵呵,直接判断是不是一个点连起来所有的特殊边(连接2不同颜色的点的边)

    (一开始还想各种各样奇怪的dfs。。。垃圾)

     1 #include<bits/stdc++.h> 
     2 #define LL long long 
     3 #define N 100005
     4 #define lowbit(x) x&(-x)
     5 using namespace std;
     6 inline int ra()
     7 {
     8     int x=0,f=1; char ch=getchar();
     9     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    10     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    11     return x*f;
    12 }
    13 int head[N],cnt;
    14 struct node{
    15     int next,to;
    16 }e[N<<1];
    17 int n,col[N],tot;
    18 void insert(int x, int y)
    19 {
    20     e[++cnt].next=head[x];
    21     e[cnt].to=y;
    22     head[x]=cnt;
    23 }
    24 void dfs(int x, int fa)
    25 {
    26     for (int i=head[x];i;i=e[i].next)
    27     {
    28         if (e[i].to==fa) continue;
    29         if (col[e[i].to]!=col[x]) tot++;
    30         dfs(e[i].to,x); 
    31     }
    32 }
    33 int main()
    34 {
    35     int n=ra();
    36     for (int i=1; i<n; i++)
    37     {
    38         int x=ra(),y=ra();
    39         insert(x,y);
    40         insert(y,x);
    41     }
    42     for (int i=1; i<=n; i++)
    43         col[i]=ra();
    44     dfs(1,0);
    45     for (int i=1; i<=n; i++)
    46     {
    47         int sum=0;
    48         for (int j=head[i];j;j=e[j].next)
    49             if (col[e[j].to]!=col[i]) sum++;
    50         if (sum==tot) 
    51         {
    52             cout<<"YES"<<endl<<i;
    53             return 0;
    54         }
    55     }
    56     cout<<"NO";
    57     return 0;
    58 }
  • 相关阅读:
    Antelope 和Barracuda区别
    MySQL监控工具-orztop
    MySQL监控工具-orzdba
    CentOS7 下 Hadoop 单节点(伪分布式)部署
    MyBatis-获取 xxxMapper(源码)
    MyBatis-获取 SqlSession(源码)
    Java-获取 JDK 动态代理生成的 Class 文件
    MyBatis-SqlSessionFactory 的创建(源码)
    JAVA-Enum 枚举
    JAVA-Proxy 代理
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6364503.html
Copyright © 2020-2023  润新知