CodeForces734E - Anton and Tree(缩点+树的直径)

本体研究综述(转) (这篇文章是从http://imarine.blog.163.com/中转载过来的,个人觉得对本体的介绍比较全面!)本体综述本体作为一种能在语义和知识层次上描述领域概念的建模工具,其目标是捕获相关领域的知识,确定该领域内共同认可的词汇,通过概念之间的关系来描述概念的语义,提供对该领域知识的共同理解。语义Web(the Semantic Web)是在本体理论基础之上对现有Web所进行的扩展[ 阅读详情

题目链接:

http://codeforces.com/problemset/problem/734/E


题目大意:

给定一棵无根数,每个节点有黑白两种颜色,现在有一种涂色操作,一次可以将一块连通的同色区域涂为一个颜色,现在求最少操作几次可以将整棵树涂成黑色或白色。


解题过程:

因为之前做过一个涂板子的题,进行的操作和这个一样,也是先缩点。不过那个数据范围比较小,枚举所有点BFS一次,求最长路即可,但是做过数据范围比较大,所以用到了树的某些性质。


题目分析:

关于树的直径的介绍和BFS的求法,建议看这篇博客,也有详细证明。

如果之前做过这道题的话,那么这个题的思路不难想,就是缩点然后再求一下树的直径就好了。

树的直径有一个性质,以树的直径中点上的一点为根,将这颗无根树转化为有根树的话,这样做会使树的深度最小,且为树的直径的一半(向上取整),因为如果有一个叶子节点比直径更深的话,那么就可以构成一个更长的直径,与假设矛盾。

另外在树上缩点,构成的新的图也是一棵树。


AC代码:

#include <bits/stdc++.h>
using namespace std;

const int MAX = 212345;

int color[MAX], n, vis[MAX], top;
vector<int> raw_edge[MAX], edge[MAX];

//用DFS染色缩点
void dfs(int u) {
    vis[u] = top;
    for (int i = 0; i < raw_edge[u].size(); i++) {
        int v = raw_edge[u][i];
        if (!vis[v] && color[u] == color[v]) {
            //如果颜色相同,并且没访问过那么缩成一个点
            dfs(v);
        }
        else if (vis[v] && color[u] != color[v]){
            //如果颜色不同,并且访问过,那么就建边
            edge[top].push_back(vis[v]);
            edge[vis[v]].push_back(top);
        }
    }
}

void build() {
    top = 1;
    memset(vis, 0, sizeof(vis));
    for (int i = 1; i <= n; i++) {
        if (!vis[i]) {
            dfs(i);
            top++;
        }
    }
}

//BFS求最长路
int bfs(int u) {
    memset(vis, 0, sizeof(vis));
    queue<int> q;
    q.push(u);
    vis[u] = 1;
    while (!q.empty()) {
        u = q.front();
        q.pop();
        for (int i = 0; i < edge[u].size(); i++) {
            int v = edge[u][i];
            if (!vis[v]) {
                vis[v] = vis[u] + 1;
                q.push(v);
            }
        }
    }
    int pos = 1;
    for (int i = 1; i < top; i++) {
        if (vis[i] > vis[pos])
            pos = i;
    }
    return pos;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> color[i];
    }
    for (int i = 0; i < n-1; i++) {
        int u, v;
        scanf("%d %d", &u, &v);
        raw_edge[u].push_back(v);
        raw_edge[v].push_back(u);
    }
    build();
    //先确定直径的一个端点
    int x = bfs(1);
    //然后从端点跑最长路求出直径长度,这里距离求出来的是比实际距离大1,所以默认向上取整
    printf("%d\n", vis[bfs(x)]/2);
}
PICO SCOPE 二次开发 基于C#开发一个简单的PICO示波器的上位机工作,与MCC600运动控制卡一起,实现数据自动采集 阅读详情

相关推荐

Palabos User Guide中文解读 | 第一章 | 介绍

译者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,能不能完成全本翻译再说,而且文中我也会标记我不确定的地方,以传达意思为主,翻译不当的地方还请各位读者帮忙指正。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of...

Yulan Fang's notes. 6977

【CF734E】Anton and Tree【树的直径】

一开始理解错题意了,直接暴力判断连通块个数,我就说怎么这么简单。。。其实这个颜色的连通块是会动态变化的,染色之后可能会有合并连通块的发生。问题好像瞬间复杂了起来。但是在染色的时候连通块一定会一起被染色,于是就相当于一个点了,我们也用DFS去缩成一个点,不难发现,新的一棵树上,都是黑白点交替出现的。想到这里可能觉得跟树的深度有关,但是换根深度也会变化。实际上答案就是(树的直径+1)/2,从直径的中点开始染色就行,只要想到直径方案是显然的。

ssllyr 231

单端反激电源的RCD钳位电路吸收设计

反激电源尖峰电压和特点: 反激开关电源主要适用于中小功率<100W的电源设计中,特点是电路简单、成本低、可靠性高、宽稳压范围、转换效率PF高。但是由于本身变压器的漏感和其他参数的影响,变压器在高速开关关断瞬间会产生很大的尖峰电压,截止时产生的尖峰电压是由电路中的储能元件释放的电流引起的突变,过高的尖峰电压会影响开关管的正常工作,需要对尖峰电压采取措施抑制尖峰电压。 如上图所示,尖峰电压的钳位抑制方式有很多种。 TVS成本偏高,属于硬件导通,元件的可靠性较差,在低电压工作效果不理想。 RCD回路吸收

qq_31687191的博客 8488

Codeforces 734E Anton and Tree(并查集+树的直径)

传送门 题意:给一棵黑白染色过的树,每次操作可以将一块连通的同色子图(连通块内不含另一颜色)染成另一颜色,问最小需要操作几次才能将树上所有节点统一为同一颜色。 题解:先用并查集缩点,把同一颜色的连通的缩成一个点,得到新树,然后直径上的点数/2即可。(从直径中间那个点开始染色,把同色的区间不断往直径两端扩展,这个过程中非直径上的点的颜色也会被统一) 脑洞还是不够大....树的直径又没看出来诶 #include<cstdio> #include<cstring> #includ

KGV093的博客 274

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4350

Circos在Windows下的安装教程

这里写自定义目录标题Circos简介安装Perl 的安装Circos安装安装及解压安装Modules测试用例官方文档 Circos简介 (来源官网:http://circos.ca/software/readme/ O.INTRODUCTION部分) Circos is a program for the generation of publication-quality, circularly composited renditions of genomic data and related annot

qq_42318911的博客 1661

CodeForces 734 E.Anton and Tree

E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes Anton is growing a tree in his garden. In case you forgot, the tree is a connected acyclic undirected graph. The...

nan 388

图解B树的原理及操作

本文主要参考:https://blog.youkuaiyun.com/shenchaohao12321/article/details/83243314 1. B树 1.1 B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-

jinking01的专栏 3万+

codeforces 734 E. Anton and Tree(连通分量缩点+树的直径)

题目链接:http://codeforces.com/contest/734/problem/E思路:先缩点,变成黑白相间的一棵树,然后找出树的直径d,每改变一个节点的颜色,相当于将一整块变成一个新的连通分量,画张图可以看出来,答案就是(d+1)/2;#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; ...

llmxby 277

用 ABAP ADK 写一个可控的自建表归档程序:从选择屏幕到 ARCHIVE_SAVE_OBJECT 的完整链路

文章摘要: 本文介绍了SAP系统中数据归档的核心概念与实践方法。归档旨在将不常访问但需保留的数据从在线数据库移出,以减轻系统负载,同时满足合规要求。文章重点阐述了: 归档与备份、重组的本质区别 SAP归档框架的核心组件:归档对象(AOBJ)、归档管理界面(SARA)和ADK开发工具包 通过YAPTMAIN表示例,展示了完整的归档流程: 使用选择屏幕控制归档范围 管理归档会话 写入归档记录 生成统计报表 强调了归档程序设计中需要考虑的运维、审计和性能因素 该方案可有效解决自建日志表"悄悄长胖&quo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 227

新系统申请软件著作权详细操作说明

今年八月底版权中心系统升级,新系统相对好用一些,至少不用再拿IE访问了,但是多了一项实名认证。下面介绍新系统的操作流程。 目录注册、登录和实名认证注册登录实名认证软件登记申请申请表填写鉴别材料身份证明文件权利归属证明文件其他材料提交材料变更登记 注册、登录和实名认证 首先访问版权中心系统:https://register.ccopyright.com.cn/login.html,如果老系统有账号直接登录即可,没有的话需要注册。 注册 点击注册按钮进入注册。 根据实际情况选择个人或单位,每个个人或单位只能在

Programming Talk 1万+

Codeforces 734E Anton and Tree(缩点+树的直径)

题目链接:Anton and Tree 题意:给出一棵树由0和1构成,一次操作可以将树上一块相同的数字转换为另一个(0->1 , 1->0),求最少几次操作可以把这棵数转化为只有一个数字的一棵数。 题解:首先一次可以改变一片数字,那么进行缩点后就变成了每次改变一个点。缩完点后这棵数变成了一棵相邻节点不同,0和1相交叉的一棵树。然后一棵树的直径上就是 0 1 0 1...

160

Xilinx FPGA平台GTX简易使用教程(四)GTX IP核配置教程

干货来了,GTX IP核配置,搬砖全靠它~~

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

CodeForces 734E-Anton and Tree(并查集缩点+树的直径)

题目链接:https://codeforces.com/problemset/problem/734/E 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13417220.html Anton is growing a tree in his garden. In case you forgot, the tree is a connected acyclic undirected graph. There are n vertices in the tree,

孤风的博客 560

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Codeforces 734E Anton and Tree (dfs缩点+树的直径)

E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Anton is growing a tree in his garden. In case yo

K键盘里的青春K 843

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Codeforces 734E. Anton and Tree By Assassin 缩点+树的最大直径

题意就不多加赘述了,说白了就是每一次可以反转任意连通块儿,这个连通块儿必须满足相连且花色相同,问你最少的反转次数。思路:一看题目思路其实很清楚了,我们为了缩小数据规模,利用缩点将一个连同块儿化成一个点,之后我们一定可以得到一个树,因为原题就是一个树,之后我们只需要找到树的最大直径就行了。 步骤1:缩点 步骤2:求树的最大直径(其实就是两次搜索,因为第一次从任意点出发找到最远的一个点,那么这个点一

Assassin 466

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces 734E Anton and Tree【并查集缩点||DFS缩点+树的直径】

E. Anton and Tree Anton is growinga tree in his garden. In case you forgot, the tree is a connected acyclicundirected graph. There aren vertices in the tree, each of them is painted black or white. Antondoesn't like multicolored trees, so he wants to chang

Dust_heart的博客 615

Codeforces 734E Anton and Tree【并查集缩点+树的直径】好题~

E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Anton is growing a tree in his garden. In case you

mengxiang000000 595

D - Anton and Tree CodeForces - 734E(dfs 缩点+树的直径)

题意 给我一颗有 n 个节点的树,树的编号从 1~n 开始,树的节点有点权,值为 0 的表示节点被染成了 白色,权值为的时候被染成了黑色, 现在我们的给我们提供一种操作(如下图):选择某一个结点 x,让把所有把 x 能直接有路径到达的点设这些点为 y,且 y 与 x 同色,把 x 与所有 y 的颜色进行翻转。 思路 把相邻且颜色相同的点认为是在一个连通分量里面,这个时候如果我们选择一个连通分量对其进行翻转,那么翻转之后这个连通分量与周围的连通分量的颜色变的相同,相当于同化了周围的连通分量,接下来我们

做一只熊猫不好吗? 174

Codeforces-734E Anton and Tree(树的直径)

E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Anton is growing a tree in his garden. In

十分残念的博客 498

CodeForces - 734E Anton and Tree

博主的 BiBi 时间 博主还有 1h+11min\mathtt{1h+11min}1h+11min 就ヾノ≧∀≦)o 放假啦!好鸡冻!!! 然鹅博主这个小蒟蒻在假期还有作业,但是和平时比较假期作业显得极其划算。hihihihihihihi~ Solution 感觉这题非常巧。 我们将同色的连通块缩成一个点,然后就有一个非常神奇的性质:ansansans 就是 ⌊新树的直径+12⌋\lfloor \frac{新树的直径+1}{2} \rfloor⌊2新树的直径+1​⌋。 你可能觉得答案应该是 min⁡(黑点

Oxide‘s Blog 297

[codeforces 734E]Anton and Tree

【题目大意】 给一棵n( 【解题思路】 先将相同颜色的连通块缩点,然后我们就得到了一棵黑白相间的树。 我们可以发现当确定一个点为根时的最少操作数为树的高度减一。 当以树的直径的中点为根时树的高度最小。 因此答案为(树的直径长度+1)/2。 用dp或者两次dfs求出树的直径。 【呆马】 #include #include #inclu

S_G_G的博客 580

Codeforces 734E. Anton and Tree (联通块 + 树的直径)

Description Anton is growing a tree in his garden. In case you forgot, the tree is a connected acyclic undirected graph. There are n vertices in the tree, each of them is painted black or white. Anton doesn’t like multicolored trees, so he wants to change

chr1stopher 304

Anton and Tree CodeForces - 734E(树的直径)

Anton is growing a tree in his garden. In case you forgot, the tree is a connected acyclic undirected graph. There are n vertices in the tree, each of them is painted black or white. Anton doesn’t like multicolored trees, so he wants to change the tree suc

tomjobs的博客 411

codeforces - 734E - Anton and Tree(图论 树)

codeforces - 734E - Anton and Tree(图论 树)LINK:http://codeforces.com/contest/734/problem/E题意: 给一棵树,点被染成了黑白二色,每次操作可以翻转相邻的同色点的颜色,问最少多少次操作能把整棵树染成一个颜色。解法: 当天没去看..被剧透了,帮人把结论证明了一遍:把相邻同色的点缩点之后树的直径的一半就是答案。 对每

horihori_的博客 833

【codeforces 734E】Anton and Tree【缩点+DP】

题目链接:codeforces 734E题目大意:来看题解的都是知道题目是什么意思的,我就不多嘴了。题解cf自题解已经非常清楚了。先缩点,再找出该树一条最长的直径d,答案就是(d+1)/2 为什么呐?? 假设树的直径是0,那么答案就是0吧。然后我们就可以看到这个事实: the tree diameter can’t be decreased more than by two per one pa

cyclization的小栈 408
上一篇: HackerRank - pairs-again(暴力+预处理)
下一篇: CodeForces743D - Chloe and pleasant prizes(树型DP)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值