C. Timofey and a tree
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Each New Year Timofey and his friends cut down a tree of n vertices and bring it home. After that they paint all the n its vertices, so that the i-th vertex gets color ci.

Now it's time for Timofey birthday, and his mother asked him to remove the tree. Timofey removes the tree in the following way: he takes some vertex in hands, while all the other vertices move down so that the tree becomes rooted at the chosen vertex. After that Timofey brings the tree to a trash can.

Timofey doesn't like it when many colors are mixing together. A subtree annoys him if there are vertices of different color in it. Timofey wants to find a vertex which he should take in hands so that there are no subtrees that annoy him. He doesn't consider the whole tree as a subtree since he can't see the color of the root vertex.

A subtree of some vertex is a subgraph containing that vertex and all its descendants.

Your task is to determine if there is a vertex, taking which in hands Timofey wouldn't be annoyed.

Input

The first line contains single integer n (2 ≤ n ≤ 105) — the number of vertices in the tree.

Each of the next n - 1 lines contains two integers u and v (1 ≤ u, v ≤ n, u ≠ v), denoting there is an edge between vertices u and v. It is guaranteed that the given graph is a tree.

The next line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 105), denoting the colors of the vertices.

Output

Print "NO" in a single line, if Timofey can't take the tree in such a way that it doesn't annoy him.

Otherwise print "YES" in the first line. In the second line print the index of the vertex which Timofey should take in hands. If there are multiple answers, print any of them.

Examples
Input
4
1 2
2 3
3 4
1 2 1 1
Output
YES
2
Input
3
1 2
2 3
1 2 3
Output
YES
2
Input
4
1 2
2 3
3 4
1 2 1 2
Output
NO
题目大意就是说是否存在这么一个点,使得去掉这个点后,所形成的子树在同一棵树上是否颜色相同,如果有不同的就输出NO,有就输出yes,并且输出该节点,答案可能不唯一。
思路:DFS ,邻接表,优化。
ps:该方法不是最优的方法,在这里我只写了这个大多数人都能想到的方法。

AC代码:
 1 #include<iostream>
2 #include<stdio.h>
3 #include<vector>
4 using namespace std;
5 struct Node{
6 int st;
7 int en;
8 } dis[100050];
9 vector<int > load[100050];//邻接表
10 int color[100050];
11 bool dfs(int root,int fa,int col,int t)
12 {
13 if(t!=2) t++;
14 else
15 {
16 if(col!=color[fa])//颜色不同,返回false
17 return false;
18 }
19 bool fl;
20 for(int i=0;i<load[root].size();i++)
21 {
22 int nxt=load[root][i];
23 if(nxt!=fa)
24 {
25 fl=dfs(nxt,root,color[nxt],t);
26 if(!fl)
27 return false;
28 }
29 }
30 return true;
31 }
32 int main()
33 {
34 int n,x,y;
35 cin>>n;
36 for(int i=0;i<n-1;i++)
37 {
38 scanf("%d%d",&x,&y);
39 dis[i].st=x;//这个数组是用来查找的时候优化的。
40 dis[i].en=y;
41 load[x].push_back(y);
42 load[y].push_back(x);
43 }
44 for(int i=1;i<=n;i++)
45 scanf("%d",&color[i]);
46 bool flag=false,fg=false;
47 int i,vis=0;
48 for(int i=0;i<n-1;i++)
49 if(color[dis[i].st]==color[dis[i].en])
50 vis++;
51 if(vis==n-1)//如果相等,说明都是同一种颜色。输出1就ok
52 {
53 cout<<"YES"<<endl<<1<<endl;
54 return 0;
55 }
56 if(n==2)//只有两个节点的时候
57 {
58 cout<<"YES"<<endl<<1<<endl;
59 return 0;
60 }
61 int r;
62 for(int j=0;j<n-1;j++)
63 {
64 int i=dis[j].st;
65 int b=dis[j].en;
66 if(color[i]!=color[b])//颜色不同,必有一个点是要去除的点。
67 {
68 flag=dfs(i,i,color[i],0);
69 if(flag)
70 {
71 r=i;
72 fg=true;
73 break;
74 }
75 flag=dfs(b,b,color[b],0);
76 if(flag)
77 {
78 fg=true;
79 r=b;
80 }
81 break;
82 }
83 }
84 if(fg)
85 cout<<"YES"<<endl<<r<<endl;
86 else //如果颜色不同,且fg为false,那么必不存在
87 cout<<"NO"<<endl;
88 return 0;
89 }
90


CodeForces - 764C的更多相关文章

  1. 【codeforces 764C】Timofey and a tree

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. Codeforces 764C Timofey and a tree

    Each New Year Timofey and his friends cut down a tree of n vertices and bring it home. After that th ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  10. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. pytest-xdist分布式测试原理浅析

    pytest-xdist执行流程: 解析命令行参数:pytest-xdist 会解析命令行参数,获取用户指定的分发模式.进程数.主机列表等信息. 加载测试用例:pytest-xdist 会加载所有的 ...

  2. 作为一个客户经理你一个如何给客户介绍API接口

    随着科技的发展,API(Application Programming Interface,应用程序接口)的应用已经逐渐普及,而API接口作为现代企业实现智能化运营和管理的重要工具之一,也备受关注.作 ...

  3. 【SpringBoot实战】开发入门--快速创建springboot程序

    前言 本片博客记录快速创建springboot工程的使用spring initializr创建.开发环境JDK1.8.IDEA.maven. SpringBoot 优点 可快速构建spring应用 直 ...

  4. 特斯拉Dojo超算:AI训练平台的自动驾驶与通用人工智能之关键

    特斯拉公开Dojo超算架构细节,AI训练算力平台成为其自动驾驶与通用人工智能布局的关键一环 在近日举行的Hot Chips 34会议上,特斯拉披露了其自主研发的AI超算Dojo的详细信息.Dojo是一 ...

  5. Ds100p -「数据结构百题」11~20

    11.P3203 [HNOI2010]弹飞绵羊 某天,\(Lostmonkey\) 发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏. 游戏一开始,\(Lostmonkey ...

  6. 浅析依赖属性(DependencyProperty)

    在WPF中,引入了依赖属性这个概念,提到依赖属性时通常都会说依赖属性能节省实例对内存的开销.此外依赖属性还有两大优势. 支持多属性值,依赖属性系统可以储存多个值,配合Expression.Style. ...

  7. 多租户基于Springboot+MybatisPlus实现使用一个数据库一个表 使用字段进行数据隔离

    多租户实现方式 多租户在数据存储上主要存在三种方案,分别是: 1. 独立数据库 即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高. 优点:为不同的租户提供独立的数据库,有助 ...

  8. MySQL系列之——SQL介绍、常用SQL分类、数据类型、表属性、字符集、DDL应用、DCL应用、DML应用(增删改)、DQL应用(select )、元数据信息、show命令

    文章目录 一 SQL介绍 二 常用SQL分类 2.1 客户端命令 三 数据类型.表属性.字符集 3.1 数据类型 3.1.1 作用 3.1.2 种类 3.2 表属性 3.2.1 列属性 3.2.2 表 ...

  9. Super Apps 超级应用们背后的道家哲学

    众所周知,Elon Musk 想将 Twitter 重新设计定位成一款"超级应用 - X"的野心已经不再是秘密.伴随着应用商店中 Twitter 标志性的蓝鸟 Logo 被 X 取 ...

  10. 机器学习实战1-kNN最近邻算法

    目录 机器学习基础 机器学习的关键术语 k-近邻算法(KNN) 准备:使用python导入数据 实施kNN分类算法 示例:使用kNN改进约会网站的配对效果 准备数据:从文本文件中解析数据 分析数据 准 ...