CF1375G Tree Modification
时间:2021-07-21
本文章向大家介绍CF1375G Tree Modification,主要包括CF1375G Tree Modification使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
\(\mathtt{Description}\)
给 \(n\) 个点的树,可以进行如下操作:
选择三个点 \(a,b,c\),要求 \(a,b\) 相邻,\(b,c\) 相邻,断掉 \(a\) 的所有边,并连到 \(c\) 上,将 \(a,c\) 连边。
求最小操作次数使得该树变成菊花图。
\(n\le2\times 10^5\)
\(\mathtt{Solution}\)
考虑这个魔性的修改带来的效果。
对树进行黑白染色(即 \(x\) 节点的父亲和儿子都是与其相反的颜色)并动态维护颜色,发现一次操作之后,只会改变 \(a\) 的颜色。
而菊花图的条件则是只有一个点是黑或白,所以答案就是 \(\min(\text{white,black)}-1\)(即至修改黑点颜色或至修改白点颜色)。
\(\mathtt{Code}\)
#include <cstdio>
#include <algorithm>
const int N = 2e5 + 5 ;
int n,cnt;
int head[N],to[N << 1],nxt[N << 1],clr[N] ;
void add(int u,int v) {
to[++cnt] = v,nxt[cnt] = head[u],head[u] = cnt ;
}
void dfs(int x,int f) {
clr[x] = clr[f] ^ 1;
for (int i = head[x]; i; i = nxt[i]){
int v = to[i] ;
if (v == f) continue ;
dfs(v,x) ;
}
}
int main() {
scanf("%d",&n) ;
for (int i = 1,u,v; i < n; ++i)
scanf("%d%d",&u,&v),add(u,v),add(v,u) ;
dfs(1,0) ;
int w = 0,b = 0 ;
for (int i = 1; i <= n; ++i)
w += clr[i],b += clr[i] ^ 1;
printf("%d",std::min(w,b) - 1) ;
return 0 ;
}
原文地址:https://www.cnblogs.com/hl-fc/p/15038611.html
- 三步学会用spring开发OSGI——(第二步:工程篇)
- Golang语言 控制结构
- Python标准库笔记(1) — string模块
- 曲线点抽稀算法-Python实现
- Python判断文件是否存在的三种方法
- Golang语言 ---切片:用法和本质
- Django 1.10中文文档-第一个应用Part7-自定义管理站点
- 转--Golang语言--复合数据
- 三步学会用spring开发OSGI——(第三步:web篇)
- Python标准库笔记(5) — sched模块
- 设计模式(4)-序列生成器之单例模式
- PyCharm 自定义文件和代码模板
- kotlin到底好在哪里?
- Django 1.10中文文档-第一个应用Part6-静态文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 实现 php 的 var_dump 功能
- RSA初探,聊聊怎么破解HTTPS
- 深入解析Underscore.js源码架构
- python正向连接后门
- setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop
- emlog全版本CSRF加用户xsser.me模块
- 从发布订阅模式入手读懂Node.js的EventEmitter源码
- 手写一个Promise/A+,完美通过官方872个测试用例
- 浅析白盒审计中的字符编码及SQL注入
- JS做类型检测到底有几种方法?看完本文就知道了!
- HDwiki时间延迟盲注及利用代码
- JS作用域和变量提升看这一篇就够了
- 不知道怎么提高代码复用性?看看这几种设计模式吧!
- 框架源码中用来提高扩展性的设计模式
- 不知道怎么提高代码质量?来看看这几种设计模式吧!