CF1879E Interactive Game with Coloring 题解

CF1879E Interactive Game with Coloring

题意

交互库给你一棵 n n n 个节点树,你需要给这棵树的边染色,然后交互库要在这棵树上给你玩一个游戏。

交互库会选择一个位置放置一个棋子,但是他不会告诉你这个棋子的位置和深度。

每次交互库会给出棋子所在节点对于每种颜色有几条边,你需要选择一种颜色,交互库会沿着这条颜色的边走,如果有多条该颜色的边,交互库会随便选择边走。

对于每次你都需要引导棋子向根节点走,当棋子走到根节点你将获胜,否则交互库将获胜。

你需要保证获胜的情况下,使得颜色的种数最少。

解析

我们定义:

一个节点往根节点方向的边叫做根向边
一个节点往叶节点方向的边叫做叶向边
有唯一叶向边的节点叫做单子节点
以根节点的儿子为根的子树叫做大子树

首先我们先想到我们可以将边的深度奇偶性来给边进行染色,如图1:

但这样做显然是有问题的,如图2:

当棋子在黑色节点的时候,因为红边和蓝边都只有一条,所以我们就无法判断出该走红遍还是蓝边。

既然两种颜色不行,那就加一种,有三种颜色就好一定能做了,我们可以对边的深度模 3 3 3 交替染色,如图3:

若当前节点有黄蓝两种边,那么就选择走黄边,同理,若当前节点有红黄两种边,那么就选择走红边,若当前节点有红蓝两种边,那么就选择走蓝边。

也就是说,我们最多只需要 3 3 3 种颜色就可以保证赢得交互部,但是 3 3 3 种并不是最优的,考虑是否有特殊情况能减少颜色总数。

我们先来考虑能用 1 1 1 种颜色染色的情况:

这个很简单,即整棵树只有两层,如图4:

再来考虑能用 2 2 2 种颜色染色的情况:

情况一,整棵树只有三层,如图5:

情况二,我们再次回到最开始的图2:

我们发现,对于图2中的单子节点,只要所有的单子节点的深度奇偶性一致就能保证这整棵树能用 2 2 2 种颜色染色。

但是如果所有的单子节点,他们的深度奇偶性不同,那么是不是不能用 2 2 2 颜色然呢?

我们发现,根节点是唯一没有根向边的节点,也就是说,我们可以任意改变根节点叶向边的颜色,例如图6:

那么结论就显然了,如果这个单子节点所在的大子树中深度奇偶性与我们规定的不一样,那就反转该单子节点所在的大子树的所有边的颜色。

如果一颗大子树中,都有深度奇偶性不同的单子节点,那就必须要用 3 3 3 种颜色。

那么这道题的构造部分就完工了,总结一下:

先特判两种特殊情况:

1.整棵树只有 2 2 2 层,那就可以只用 1 1 1 种颜色

2.整棵树只有 3 3 3 层,那就可以只用 2 2 2 种颜色

如果在一棵大子树中,既有深度为奇的单子节点,也有深度为偶的单子节点,那就必须用 3 3 3 种颜色,轮换染色即可。

其余的情况都可以用 2 2 2 种情况染色,先对这整棵树进行交替染色,再看所有的单子节点的根向边颜色是否相同,不同的话,将一部分的单子节点所在的大子树的边全部翻转即可,就可以将所有的单子节点的根向边颜色相同了。

然后建立真值表判断交互库的返回值进行输出就行了。

代码老是UKE不知为什么,不放了。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值