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. api接口怎么使用

    API接口的使用在当今的软件开发中非常普遍,它允许不同的应用程序或服务之间进行数据交换和功能交互.API接口使得开发人员能够将不同的系统或平台集成在一起,以实现更复杂的功能和应用.本文将详细介绍API ...

  2. RabbitMQ 如何实现延迟队列?

    延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息. 延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单. 给活跃度比较低的用户间隔 N ...

  3. 【译】在 Visual Studio 2022 中安全地在 HTTP 请求中使用机密

    在 Visual Studio 2022 的17.8 Preview 1版本中,我们更新了 HTTP 文件编辑器,使您能够外部化变量,从而使跨不同环境的 Web API 测试更容易.此更新还包括以安全 ...

  4. Android 编译介绍

    一.需求 Android的源码非常的庞大,编译Android系统往往会占用我们很长的时间,我们需要了解下Android的编译规则,以期能提高我们的开发效率,达到程序员按时下班的伟大理想. 二.环境 平 ...

  5. Teamcenter RAC 开发之《AbstractRendering》

    背景 关于Teamcenter RAC 客制化渲染表单,做一两个有时间做还是可以的,问题是大批量做的时候就会存在很多重复的代码 例如: 1.定义很多 TCProperty,JTextFiled,ite ...

  6. 分布式事务:XA和Seata的XA模式

    上一篇内容<从2PC和容错共识算法讨论zookeeper中的Create请求>介绍了保证分布式事务提交的两阶段提交协议,而XA是针对两阶段提交提出的接口实现标准,本文则对XA进行介绍. 1 ...

  7. aspnetcore微服务之间grpc通信,无proto文件

    aspnetcore微服务之间通信grpc,一般服务对外接口用restful架构,HTTP请求,服务之间的通信grpc多走内网. 以前写过一篇grpc和web前端之间的通讯,代码如下: exercis ...

  8. 使用Github Copilot完成代码编写

    上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...

  9. 长程 Transformer 模型

    Tay 等人的 Efficient Transformers taxonomy from Efficient Transformers: a Survey 论文 本文由 Teven Le Scao.P ...

  10. Spring @ConfigurationProperties Yaml语法配置List和Map:List<String>、List<Obj>、List<List<Obj>>、Map<String,String>、Map<String,List<String>>、Map<String,Obj>、Map<String,List<Obj>>

    yaml语法 数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号"-"来表示,map结构里面的key/value对用冒号":"来分隔. ...