题目链接: Anton and Tree

题意:给出一棵树由0和1构成,一次操作可以将树上一块相同的数字转换为另一个(0->1 , 1->0),求最少几次操作可以把这棵数转化为只有一个数字的一棵数。

题解:首先一次可以改变一片数字,那么进行缩点后就变成了每次改变一个点。缩完点后这棵数变成了一棵相邻节点不同,0和1相交叉的一棵树。然后一棵树的直径上就是

        

这种情况,相当于从中间开始操作,总共操作(L+1)/2次。关于其他的分支一定会在直径的改变过程中完成改变。

 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5+;
const long long INF = 1e9+;
typedef pair<int,int> P;
int N,M,T;
vector<P> V;
int dir[MAX_N];
int vec[MAX_N];
int father[MAX_N];
int vis[MAX_N];
vector<int> tran[MAX_N];
int start,deep;
void init(){
for(int i=;i<MAX_N;i++){
dir[i] = i;
tran[i].clear();
vis[i] = ;
}
V.clear();
start = -;
deep = ;
}
int find_f(int x){
if(x == dir[x]) return x;
return dir[x] = find_f(dir[x]);
}
void bfs(int pos,int deepth){
if(deepth > deep){
deep = deepth;
start = pos;
//cout<<"....."<<deepth<<endl;
}
vis[pos] = ;
for(int i=;i<tran[pos].size();i++){
if(!vis[tran[pos][i]]) bfs(tran[pos][i],deepth+);
}
return ;
}
int main()
{
while(cin>>N){
init();
for(int i=;i<=N;i++){
scanf("%d",&vec[i]);
}
for(int i=;i<N-;i++){
int a,b;
scanf("%d%d",&a,&b);
int fa = find_f(a);
int fb = find_f(b);
if(vec[fa] == vec[fb] ) dir[fb] = dir[fa];
else V.push_back(P(fa,fb));
}
for(int i=;i<=N;i++){
father[i] = find_f(i);
}
for(int i=;i<V.size();i++){
P p = V[i];
//cout<<father[p.first]<<"...."<<father[p.second]<<endl;
tran[father[p.first]].push_back(father[p.second]);
tran[father[p.second]].push_back(father[p.first]);
start = father[p.first];
}
if(start == -) {
cout<<<<endl;
}
else{
bfs(start,);
deep = ;
for(int i=;i<=N;i++) vis[i] = ;
bfs(start,);
cout<<(deep+)/<<endl;
} }
return ;
}
/* */

Codeforces 734E Anton and Tree(缩点+树的直径)的更多相关文章

  1. Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 树的直径

    传送门 题意: 这道题说的是在一颗有两种颜色的树上,每操作一个节点,可以改变这个节点颜色和相邻同色节点的颜色.问最少操作次数,使得树上颜色相同. 思路: 先缩点,把相同的颜色的相邻节点缩在一起.再求出 ...

  2. Codeforces 734E. Anton and Tree 搜索

    E. Anton and Tree time limit per test: 3 seconds memory limit per test :256 megabytes input:standard ...

  3. CodeForces 734E Anton and Tree

    $dfs$缩点,树形$dp$. 首先将连通块缩点,缩点后形成一个黑白节点相间的树.接下来的任务就是寻找一个$root$,使这棵树以$root$为根,树的高度是最小的(也就是一层一层染色).树形$dp$ ...

  4. Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 直径

    E. Anton and Tree 题目连接: http://codeforces.com/contest/734/problem/E Description Anton is growing a t ...

  5. Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路

    题目链接:http://codeforces.com/contest/734/problem/E E. Anton and Tree time limit per test 3 seconds mem ...

  6. codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点

    J. Computer Network Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Des ...

  7. codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径

    题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...

  8. HDU4612 Warm up 边双(重边)缩点+树的直径

    题意:一个连通无向图,问你增加一条边后,让原图桥边最少 分析:先边双缩点,因为连通,所以消环变树,每一个树边都是桥,现在让你增加一条边,让桥变少(即形成环) 所以我们选择一条树上最长的路径,连接两端, ...

  9. hdu 4612 Warm up 有重边缩点+树的直径

    题目链接 Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tot ...

随机推荐

  1. 【python】字典/dictionary操作

    字典(dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号:分割,每个键值对之间用逗号,分割,整个字典包括在花括号 {} 中 ...

  2. (转)在.net中检索HTTP请求

    原文转载:https://www.west-wind.com/presentations/dotnetWebRequest/dotnetWebRequest.htm HTTP内容检索是应用程序的重要组 ...

  3. T-SQL查询两个日期之间的休息日(周六周日)天数

    SELECT COUNT(*) FROM MASTER..SPT_VALUES WHERE TYPE = 'P' AND DATEADD(DAY,NUMBER,'2014-03-13')<='2 ...

  4. Linux下查看端口,强制kill进程

    1.查看8088端口被哪个进程占用:netstat -apn | grep 8088 2.强制kill某一进程:kill -s 9 1827

  5. 编写脚本-SQL SERVER 用户权限分配

    USE   [TXM];GOCREATE USER  [WIN-JO\Administrator]FOR LOGIN  [WIN-JO\Administrator];GOEXEC sp_addrole ...

  6. 【转】HTTP学习---TCP和UDP协议的区别与应用

    [原文]https://www.toutiao.com/i6592813624689951239/ 概述 ⊙TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICM ...

  7. 有关于分布式缓存Hazelcast

    如果在内网段中部署或者启动缓存服务.不能存在相同的组名称.如同使用dubbo一样,会导致无法连接到缓存节点

  8. JVM各垃圾收集器对比

    本随笔是<深入理解Java虚拟机 JVM高级特性与最佳实践>读书笔记. 1.JDK1.7之后的HotSpot虚拟机所包含的所有收集器如下: 解读: 1. 总共有7种垃圾收集器 2.Seri ...

  9. c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  10. php可逆加密解密函数

    很多PHP程序员调试使用echo.print_r().var_dump().printf()等,虽然对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的 ...