C. Timofey and a tree----思维题
来源:互联网 发布:怎么用指针指向数组 编辑:程序博客网 时间:2024/05/16 01:27
题目链接:http://codeforces.com/contest/764/problem/C
一个非常好的思维题。
题意是说有没有一个点,去掉之后子图的颜色一样,如果有,就输出一个,如果有多个,就输出任意一个。
我们把这个题的边和点分开考虑,如果一个图中有不同的颜色,则必有一条边的两端不是同一种颜色,我们称这种边为特殊边,特殊边上的两个点称为特殊点,我们只需要比较特殊边的数量和特殊点被计算几次就可以了,如果特殊边和特殊点被计算的次数相同,则这就是我们需要找的点。
举个栗子,3,1 2,2 3,1 2 1这组数据,特殊边为1 2,2 3,数量为2,而1被计算了1次,2被计算了两次,3被计算了1次,所以2就是我们需要找的点,脑中模拟一下这个图就明白了。
代码:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int a[300000];int b[300000];int c[300000];int k[300000];void Init(){ memset(c,0,sizeof(c));}int main(){ int n; while(~scanf("%d",&n)){ Init(); for(int i=0;i<n-1;i++){ scanf("%d%d",&a[i],&b[i]); } for(int i=1;i<=n;i++){ scanf("%d",&k[i]); } int ans=0; for(int i=0;i<n-1;i++){ if(k[a[i]]!=k[b[i]]){ ans++; c[a[i]]++; c[b[i]]++; } } bool flag=false; for(int i=1;i<=n;i++){ if(c[i]==ans){ flag=true; printf("YES\n"); printf("%d\n",i); break; } } if(!flag){ cout<<"NO"<<endl; } } return 0;}
0 0
- C. Timofey and a tree----思维题
- 764C Timofey and a tree[思维]
- codeforces 764C Timofey and a tree (思维题)
- Codeforces 764C Timofey and a tree 树+思维
- codeforces 764C Timofey and a tree(树+思维)
- C. Timofey and a tree
- 【codeforces 764C】Timofey and a tree
- CodeForces 764C Timofey and a tree
- Timofey and a tree
- Codeforces Round #395(Div. 2)C. Timofey and a tree【思维+并查集缩点+判定】
- C. Timofey and a tree codeforces 395 div2 C
- Codeforces 764C或763A Timofey and a tree 【好题】
- Codeforces 764C - Timofey and a tree(dfs)
- Codeforces Round #395 (Div. 2) C. Timofey and a tree
- 【codeforces 764C】Timofey and a tree 题解
- Codeforces 764C Timofey and a tree(思路)
- Codeforces Round #395 (Div. 2) C. Timofey and a tree
- Codeforces Round 395 C Timofey and a tree 树
- JAVA字符串转日期或日期转字符串
- 神经网络浅讲:从神经元到深度学习
- 网站群技术:用一个平台管理集团所有下属网站,节省IT投入支持与运维管理成本
- SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法
- ubuntu上使用wine安装office2007
- C. Timofey and a tree----思维题
- 远程操作步骤
- tree属性
- thinkphp核心源码注释|Think.class.php
- ASP.NET 有哪些web服务器-
- webservice接口调用
- poj 2352 Stars(线段树 )
- 机器学习的数学基础:向量篇
- 类和方法注解的解析