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个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- android webview调用js(vue)问题记录
这几天和别人对接移动端,安卓平台,我们这边输出vue界面,安卓方反馈轮询的时候调用不到,具体原因也定位不到,只能确定前端这边没几句代码,应该没有问题,因此决定自己下载个android studio写个 ...
- Python 导入 Excel多sheet
Python 导入 Excel多sheet 假设表格的样式如下 import os import sys import django BASE_DIR = os.path.dirname(os.pat ...
- elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题, elasticsearch wildcard 一直是容易引发elasticsearch 容易宕机 ...
- 使用HTML一键打包EXE工具打包KRPANO全景项目
HTML一键打包EXE工具(HTML封装EXE, HTML转EXE)能把任意HTML项目(网址)一键打包为单个EXE文件,可以脱离浏览器和服务器,直接双击即可运行. 打包工具群:429338543 最 ...
- WPF开发必备
类库 1.XamlFlair The goal of the XamlFlair library is to ease the implementation of common animations ...
- 6.1 KMP算法搜索机器码
KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的.KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当 ...
- python爬虫——爬虫伪装和反“反爬”
前言爬虫伪装和反"反爬"是在爬虫领域中非常重要的话题.伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险:反"反爬"则是应对服务器 ...
- 【知识杂谈#1】Linux如何安装net-tools和sbin配置PATH
1. Linux下载net-tools 在Linux上下载net-tools包的方法可能会因你所使用的Linux发行版而有所不同.在某些现代的Linux发行版中,net-tools已经被弃用,而推荐使 ...
- 【RocketMQ】Dledger模式下的日志复制
RocketMQ在开启Dledger时,使用DLedgerCommitLog,其他情况使用的是CommitLog来管理消息的存储.在Dledger模式下,消息写入时Leader节点还需要将消息转发给F ...
- Django框架项目之项目基础——项目介绍、需求分析、pip安装源、环境搭建、前台、后台、跨域请求
文章目录 1 路飞学城 1.1 企业的web项目类型 1.2 企业项目开发流程 1.3 立项申请阶段 2. 需求分析 2.1 首页 2.2 登录注册 2.3 课程列表 2.4 课程详情 2.5 购物车 ...