\(\mathcal{Description}\)

  Link.

  给定一棵 \(n\) 个结点的树,每次操作选择三个结点 \(a,b,c\),满足 \((a,b),(b,c)\in E\),并令 \(a\) 的所有邻接点(包括 \(b\))与 \(c\) 邻接且不再与 \(a\) 邻接;再令 \(a\) 与 \(c\) 邻接。求至少几次操作使树变为菊花图。

  \(n\le2\times10^5\)。

  操作图例:

\(\mathcal{Solution}\)

  和 CF1025G 有点类似。不妨令 \(1\) 为树的根,结点 \(u\) 的深度记为 \(d(u)\),\(d(1)=1\)。构造势能函数 \(\Phi:T\rightarrow\mathbb N_+\),有:

\[\Phi(T)=\sum_{u\in T}[2|d(u)]
\]

  先考虑目标状态,菊花图的势能显然为 \(1\)(根是花瓣)或 \(n-1\)(根是花蕊)。再观察一次操作带来的势能变化,发现仅有 \(a\) 结点的深度的奇偶性改变,那么:

\[\Delta\Phi=\pm1
\]

  记初始时树为 \(S\),可知答案为:

\[\min\{(n-1)-\Phi(S),\Phi(S)-1\}
\]

  复杂度 \(\mathcal O(n)\)。嗯唔,做完了 www!

\(\mathcal{Code}\)

/* Clearink */

#include <cstdio>

inline int rint () {
int x = 0, f = 1; char s = getchar ();
for ( ; s < '0' || '9' < s; s = getchar () ) f = s == '-' ? -f : f;
for ( ; '0' <= s && s <= '9'; s = getchar () ) x = x * 10 + ( s ^ '0' );
return x * f;
} template<typename Tp>
inline void wint ( Tp x ) {
if ( x < 0 ) putchar ( '-' ), x = ~ x + 1;
if ( 9 < x ) wint ( x / 10 );
putchar ( x % 10 ^ '0' );
} const int MAXN = 2e5;
int n, ecnt, head[MAXN + 5], cnt[2]; struct Edge { int to, nxt; } graph[MAXN * 2 + 5]; inline void link ( const int s, const int t ) {
graph[++ ecnt] = { t, head[s] };
head[s] = ecnt;
} inline void solve ( const int u, const int f, const int dep ) {
++ cnt[dep & 1];
for ( int i = head[u], v; i; i = graph[i].nxt ) {
if ( ( v = graph[i].to ) ^ f ) {
solve ( v, u, dep + 1 );
}
}
} int main () {
n = rint ();
for ( int i = 1, u, v; i < n; ++ i ) {
u = rint (), v = rint ();
link ( u, v ), link ( v, u );
}
solve ( 1, 0, 0 );
printf ( "%d\n", ( cnt[0] < cnt[1] ? cnt[0] : cnt[1] ) - 1 );
return 0;
}

\(\mathcal{Details}\)

  势能分析的方法有点像数学上的特征值法。这种操作题没思路的时候不妨研究一下单次操作,构造出一个变化极为简单的“特征”来快速求解。

Solution -「CF 1375G」Tree Modification的更多相关文章

  1. Solution -「CF 1060F」Shrinking Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,反复随机选取一条边,合并其两端两点,新点编号在两端两点等概率选取.问每个点留到最后的概率.    ...

  2. Solution -「CF 1491H」Yuezheng Ling and Dynamic Tree

    \(\mathcal{Description}\)   Link. 做题原因:题目名.   给定一个长度 \(n-1\) 的序列 \(\{a_2,a_3,\cdots,a_n\}\),其描述了一棵 \ ...

  3. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  4. Solution -「CF 1237E」Balanced Binary Search Trees

    \(\mathcal{Description}\)   Link.   定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...

  5. Solution -「HDU 5498」Tree

    \(\mathcal{Description}\)   link.   给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...

  6. Solution -「CF 494C」Helping People

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(m\) 个操作,第 \(i\) 个操作有 \(p_i\) 的概率将 \([l_i,r_ ...

  7. Solution -「CF 793G」Oleg and Chess

    \(\mathcal{Description}\)   Link.   给一个 \(n\times n\) 的棋盘,其中 \(q\) 个互不重叠的子矩阵被禁止放棋.问最多能放多少个互不能攻击的车.   ...

  8. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  9. Solution -「CF 923F」Public Service

    \(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...

随机推荐

  1. 【Java】抽象类与抽象方法

    文章目录 抽象类与抽象方法 abstract关键字的使用 abstract修饰类:抽象类 abstract修饰方法:抽象方法 abstract使用上的注意点: 抽象类的匿名子类 模板方法设计模式 抽象 ...

  2. 学习javaScript必知必会(1)~js介绍、函数、匿名函数、自调用函数、不定长参数

    一.简单了解一下JavaScript(js) 1.什么是js? js:是网景公司开发的,是基于客户端浏览器, 面向(基于)对象.事件驱动式的页面脚本语言. 2.什么场景下使用到js? 表单验证.页面特 ...

  3. 使用HTMLTestRunner在目标目录下并未生成HTML文件解决办法

    使用pycharm工具应用HTMLTestRunner模块时,测试用例可以顺利运行,但在目标目录下并未生成HTML文件.使用python的IDLE,能够正常运行并创建写入测试结果. 测试环境:pyth ...

  4. python分支结构与循环结构

    python分支结构 一.if 单条件形式 # 年轻人的世界都不容易 age > 18 age = int(input("请输入您的年龄:")) # input()函数 模拟 ...

  5. Java集合-ArrayList源码分析

    目录 1.结构特性 2.构造函数 3.成员变量 4.常用的成员方法 5.底层数组扩容原理 6.序列化原理 7.集合元素排序 8.迭代器的实现 9.总结 1.结构特性 Java ArrayList类使用 ...

  6. WSL与gnome-desktop

    WSL与gome-desktop 经过测试和检索 确定WSL1无法在gome-desktop实现GUI桌面 只能实现其中应用的现实,比如打开记事本在Xserver https://www.reddit ...

  7. 深入理解http1.x、http 2和https

    转自 https://segmentfault.com/a/1190000015316332 一.HTTP/1.x Http1.x 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数 ...

  8. SQL查询字段,起别名,列参与数学运算

    13.简单查询 13.1.查询一个字段? select 字段名 from 表名: 其中要注意: select和from都是关键字 字段名和表名都是标识符. 强调: 对于SQL语句说,是通用的 所有的S ...

  9. JavaScript如何实现上拉加载,下拉刷新?

    转载地址: 面试官:JavaScript如何实现上拉加载,下拉刷新? 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀 ...

  10. openstack,docker,mesos,Kubernetes(k8s)

    作者:张乾链接:https://www.zhihu.com/question/62985699/answer/204233732来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...