CodeForces - 764C
C. Timofey and a treetime limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard 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.
InputThe 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.
OutputPrint "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.
ExamplesInput4
1 2
2 3
3 4
1 2 1 1OutputYES
2Input3
1 2
2 3
1 2 3OutputYES
2Input4
1 2
2 3
3 4
1 2 1 2OutputNO
题目大意就是说是否存在这么一个点,使得去掉这个点后,所形成的子树在同一棵树上是否颜色相同,如果有不同的就输出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的更多相关文章
- 【codeforces 764C】Timofey and a tree
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 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 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- 【krpano】KRPano打开黑屏: FATAL ERROR
在KRPano开发过程中,初学者打开项目经常遇到如下的问题: FATAL ERROR:tour.xml – loading failed! (0) 或者是: ERROR:Local usage wit ...
- dedebiz发布文章自动提交到百度搜索的方法
修改程序文件 依次打开/admin/article_add.php和article_edit.php 找到ClearMyAddon($id, $title); 在其上面加入 //自动提交到百度 els ...
- 噢耶!字节后端Offer,拿到了
很多同学反馈多搞点面经,说来就来! 今天分享一位拿到字节跳动实习Offer的面经,没错,Java转Go. 别问我选Java还是选Go,成年人不做选择题.先搞定一个语言,再学第二语言从来不是难事. 无论 ...
- Java 21 新特性:虚拟线程(Virtual Threads)
在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易.更高效. 虚拟线程,也称为"用户模式线程(user-mode t ...
- stm32开发笔记
STM32F103C8T6单片机简介 标准库与HAL库区别 寄存器 寄存器众多,需要经常翻阅芯片手册,费时费力: 更大灵活性,可以随心所欲达到自己的目的: 深入理解单片机的运行原理,知其然更知其所以然 ...
- Flask框架——flask介绍
文章目录 1 什么是flask? 2 为什么要有flask? 3 学前准备:虚拟环境 3.1 虚拟环境是什么? 3.2 如何使用虚拟环境? 3.2.1 搭建虚拟环境 3.2.1 在虚拟环境中安装我们的 ...
- Markdown · Typora | 基本画图技巧
如果想画一些简单的状态图,可以使用 typora 自带的 mermaid 工具. (mermaid 不止能画简单的状态图,还能画流程图等,详见参考资料) 定义节点 可以定义不同形状的节点,并为节点添加 ...
- Face to Face with Hurricane Camille
1.Face to Face with Hurricane Camille Joseph P. Blank 1 John Koshak, Jr., knew that Hurricane Camill ...
- ELK-日志收集-Kibana WEB安全认证
1.ELK收集MYSQL日志实战: 日志收集存放目录位置: /usr/local/logstash/config/etc/ 1)日志采集-存入redis缓存数据库:mysql-redis.conf ...
- DP 杂题选做
部分详见: 概率期望 DP 学习笔记 树形 DP 学习笔记 其余题就不具体分类了. P1220 关路灯 题解说这是区间 DP 经典题,但我以前居然没听说过,这下尴尬了. 设 \(f_{i,j,0/1} ...