【XSY2505】tree
Description
机房断网了!xj轻而易举地撬开了中心机房的锁,拉着zwl走了进去。他们发现中心主机爆炸了。
中心主机爆炸后分裂成了 n 块碎片,但碎片仍然互相连接,形成一个树的结构。每个碎片有一个状态值0或1 。zwl找了一下规律,发现只有所有碎片的状态值相同的时候,主机才能够修复。
xj碰了碰其中一个碎片 x ,发现对于满足 x 到 v 的路径上所有碎片的状态值与 x 的状态值相同 的那些碎片 v 状态值都取反(0变1,1变0)了!
现在他们要尝试修复这个网络,最少需要多少次触碰呢?
Input
碎片从 1 到 n 编号。
第一行一个整数 n ,第二行 n 个数 0 或 1, 第 i 个数表示 i 号碎片的状态值。
接下来 n−1 行,每行两个数 x,y 表示 x 与 y 碎片中有连接。
Output
一行一个数,表示最少需要的碰撞次数。
Sample Input
11
0 0 0 1 1 0 1 0 0 1 1
1 2
1 3
2 4
2 5
5 6
5 7
3 8
3 9
3 10
9 11
Sample Output
2
HINT
样例解释:首先触碰三号碎片,再触碰六号碎片,这样所有碎片的状态值都会变为1 ,共触碰两次。
首先,他触碰的作用就是把一个以颜色相同为标准的连通块的颜色集体反转(下面的联通块的定义也是颜色相同)。
那我们可以将一个联通块缩成一个点。
正确答案就是缩点后的树的直径的一半(向上取整),\(d\)=树的直径,\(ans=[\frac{d+1}{2}]\)。
为什么是这一个数?
一棵黑白相间的树,想要把整棵树变成相同的颜色,最少也要\([\frac{d+1}{2}]\)次。
接下来,为什么这\([\frac{d+1}{2}]\)次一定可以被取到呢?
在这棵树的直径上,必然有一个点是满足距离其他所有点的距离不超过\([\frac{d+1}{2}]\),否则与树的直径为\(d\)矛盾,\([\frac{d+1}{2}]+[\frac{d+1}{2}]+1>d\)。
#include<bits/stdc++.h>
#define N 1000010
using namespace std;
struct data
{
int s,n;
}bian[N];
int to[N],nxt[N],head[N],col[N],w[N],n,x,y,cnt,tot,nct,deep[N],maxn,nt,ntt;
void adde(int x,int y)
{
to[++cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
}
void dfs(int u,int fa)//缩点
{
if(w[u]==w[fa]&&fa!=-1)
{
col[u]=col[fa];
}else{
col[u]=++tot;
bian[++nct].s=col[fa];
bian[nct].n=col[u];
}
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v!=fa)
{
dfs(v,u);
}
}
}
void slove(int u,int fa)//求直径
{
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v==fa)
{
continue;
}
deep[v]=deep[u]+1;
slove(v,u);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
}
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
adde(x,y);
adde(y,x);
}
dfs(1,-1);
memset(head,0,sizeof(head));
cnt=0;
for(int i=1;i<=nct;i++)
{
adde(bian[i].s,bian[i].n);
adde(bian[i].n,bian[i].s);
}
slove(1,-1);//开始求树的直径
maxn=-0x7f7f7f;
for(int i=1;i<=tot;i++)
{
if(deep[i]>maxn)
{
nt=i;
maxn=deep[i];
}
}
memset(deep,0,sizeof(deep));
slove(nt,-1);
maxn=-0x7f7f7f;
for(int i=1;i<=tot;i++)
{
if(deep[i]>maxn)
{
ntt=i;
maxn=deep[i];
}
}
printf("%d\n",(deep[ntt]+1)/2);
return 0;
}
【XSY2505】tree的更多相关文章
- 【POJ3237】Tree 树链剖分+线段树
[POJ3237]Tree Description You are given a tree with N nodes. The tree's nodes are numbered 1 through ...
- 【BZOJ】【2631】Tree
LCT 又一道名字叫做Tree的题目…… 看到删边加边什么的……又是动态树问题……果断再次搬出LCT. 这题比起上道[3282]tree的难点在于需要像线段树维护区间那样,进行树上路径的权值修改&am ...
- 【Luogu1501】Tree(Link-Cut Tree)
[Luogu1501]Tree(Link-Cut Tree) 题面 洛谷 题解 \(LCT\)版子题 看到了顺手敲一下而已 注意一下,别乘爆了 #include<iostream> #in ...
- 【BZOJ3282】Tree (Link-Cut Tree)
[BZOJ3282]Tree (Link-Cut Tree) 题面 BZOJ权限题呀,良心luogu上有 题解 Link-Cut Tree班子提 最近因为NOIP考炸了 学科也炸了 时间显然没有 以后 ...
- 【AtCoder3611】Tree MST(点分治,最小生成树)
[AtCoder3611]Tree MST(点分治,最小生成树) 题面 AtCoder 洛谷 给定一棵\(n\)个节点的树,现有有一张完全图,两点\(x,y\)之间的边长为\(w[x]+w[y]+di ...
- 【HDU5909】Tree Cutting(FWT)
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为 ...
- 【BZOJ2654】Tree(凸优化,最小生成树)
[BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额 ...
- 【POJ1741】Tree(点分治)
[POJ1741]Tree(点分治) 题面 Vjudge 题目大意: 求树中距离小于\(K\)的点对的数量 题解 完全不觉得点分治了.. 简直\(GG\),更别说动态点分治了... 于是来复习一下. ...
- 点分治【bzoj1468】 Tree
点分治[bzoj1468] Tree Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边 ...
随机推荐
- ELK 学习笔记之 elasticsearch 版本控制
版本控制: elasticsearch 版本控制: 内部版本控制 外部版本控制 内部版本控制: 内部版本会检查你提供的版本值和文档的版本值是否一致,如果不一致就报错,一致则可以更新. curl -XP ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)
.NET Core 3.0已经发布了,除了一大堆令人激动的功能以外,也增加了对WPF的正式支持, 那么WPF在.NET Core 3.0下的开发体验如何呢? 本文利用了Stylet框架开发.NET C ...
- 2. spring 应用之IOC
本文是作者原创,版权归作者所有.若要转载,请注明出处 我们知道Spring Framework 最重要的功能就是IoC (Inversion of Control ),也叫DI(dependency ...
- 本人亲测-百度富文本编辑器(无bug版本)
再此我想说明一点,好多教程都是转载别人的,而且也不注明从哪里转载的.每次搜点资料的时候总是跟网上刷小视频的感觉一样.有些人就直接把别人的东西粘贴过来了,一点改动都没有. 废话不多说,直接上教程. (百 ...
- Python3实战spark大数据分析及调度 ☝☝☝
Python3实战spark大数据分析及调度 ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...
- Unreal Engine 4 系列教程 Part 2:蓝图教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- 超级好用的 Java 数据可视化库:Tablesaw
本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和使用 Tablesaw 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出 ...
- [JZOJ5773]【NOIP2008模拟】简单数学题
Description 话说, 小X是个数学大佬,他喜欢做数学题.有一天,小X想考一考小Y.他问了小Y一道数学题.题目如下: 对于一个正整数N,存在一个正整数T(0<T&l ...
- RAW网络编程
LWIP提供了三种的可以被应用程序直接调用的接口API: (1) 低水平的,基于内核/回调函数的API(后面称 RAW API) 适用于数据量不大,没有os的MCU (2) ...
- [七年技术总结系列][理论篇]-RBAC权限模型由浅入深
权限部分将分两章介绍,第一章由浅入深介绍权限理论知识及应用,第二章介绍具体实现.后期再讲述中间件的使用时,还会插入一些权限内容,本质上属于中间件的应用. 权限模块是业务系统最常见.最基本的子集.本章假 ...