首页 > 其他分享 >P4434 题解

P4434 题解

时间:2023-12-31 21:44:20浏览次数:24  
标签:P4434 int 题解 fa hi connect 节点 sim

远古模拟赛里的一道题,前来写篇题解记录一下。

我们考虑一个显然的转化。将每条边染色,那么原问题等价于求下面的染色的方案数:

对于每个点对 \(a,b\),我们记 \(\operatorname{lca}(a,b)=c\) 有

  • \(a\sim c\) 上的所有边同色。
  • \(b\sim c\) 上的所有边同色。
  • \(a\sim c\) 和 \(b\sim c\) 上的边不同色。

再次转化。构造一张图 \((*)\),这张图上的每个点是原图的一条边。这张图满足对于每一对 \(a,b,c\),\(a/b\sim c\) 上的所有边(新图的点)用蓝色边连接,且对于 \(c\not =a,b\) 用红色边连接 \((a,fa[a])\) 和 \((b,fa[b])\)。

现在问题就转化成了,对这张新图的点染色,使得用蓝色边连接的点颜色相同,用红色边连接的节点颜色不同。显然我们先分别求每个连通块的结果即可。
这样考虑的话,我们发现一个节点的颜色唯一确定了这张图的所有点的颜色。这也同时意味着,如果存在一个合理的涂色方案,我们对这张图完全颜色反转,结果没有变化。因此我们只需要处理连通块是否不存在合法方案,搜一下就行。这样我们经过多次转化,问题可以轻易解决。如果存在不合法的连通块,答案为 \(0\),否则是 \(2^m\),其中 \(m\) 为连通块数量。

现在的问题就是,我们如何构造图 \((*)\)。如果我们暴力的建图,时间复杂度爆炸。我们考虑 \((x,fa [x])\) 是否和 \((fa[x],fa[fa[x]])\) 用蓝色边连接,可以另写一个函数 \(\operatorname{connect}(x)\),他返回一个节点已向 \(x\) 子树中的节点连蓝色边的最小深度。这个函数值取决于它子节点的值和直接向 \(x\) 连蓝色边的点的深度。后者可以直接用每个给定点对的 LCA 更新即可。
时间复杂度 \(O((m+n)\log n)\)。
核心代码如下:

int connect(int x, int p) {
	for (auto it : E[x])
		if (it != p) {
			int tmp = connect(it, x);
			high[x] = min(high[x], tmp);
			if (tmp < depth[x])
				add_edge(it, x, 0);
		}
	return high[x];
}
int main(){
	 while (m--) {
        int a, b;
        scanf("%d%d", &a, &b);
        int c = lca(a, b);
        hi[a] = min(hi[a], depth[c]);
        hi[b] = min(hi[b], depth[c]);
        if (a != c && b != c)
            add_edge(a, b, 1);
    }
}
	
	connect(1, 0);

标签:P4434,int,题解,fa,hi,connect,节点,sim
From: https://www.cnblogs.com/Piggy424008/p/17938047/p4434-ti-jie

相关文章

  • CF958E1 题解
    Meaning在二维平面内,有位置不同且不存在三点共线的\(R\)个红点和\(B\)个黑点,判断是否能用一些互不相交的线段连接每一个点,使得每条线段的两端都分别是黑点和白点。Solution当\(R\ne{B}\)时,显然无法实现红点与黑点的两两组合,故题干所述的情况一定不存在。当\(R=B\)时,我......
  • P5765 [CQOI2005] 珠宝 题解
    P5765[CQOI2005]珠宝题解思路好题,注意到有性质:颜色数最多为\(\lfloor\log_2n\rfloor+1\),有了这个性质之后直接树形DP糊上去就过了。简要的证明:考虑一个点,显然一种颜色即可。对于一个颜色为\(c\)的点,其儿子至少有\(c-1\)个,且为\(1\simc-1\)的排列,这样可......
  • P2898 [USACO08JAN] Haybale Guessing G 题解
    题目传送门前置知识二分答案|并查集解法对条件的合法性判断其他题解已经讲得很明白了,这里不再赘述。这里主要讲一下用并查集实现黑白染色问题。以下内容称被覆盖为黑色,不被覆盖为白色。本题因为是单向染色,即从白到黑,故可类似luoguP1840ColortheAxis和D的并查集或......
  • 二叉树面试题解析
    二叉树面试题解析判断相同的树/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNode......
  • 剑指Offer Java题解(前3道题)
    目录1.二维数组中的查找2. 替换空格3. 从尾到头打印链表1.二维数组中的查找题目链接:传送。方法一,暴力枚举。参考代码:packageproblem01;/***@Authorsyrdbt*@Date2019/7/314:05*二维数组中的查找*方法一,暴力枚举*/publicclassSolution{publicboole......
  • 杭州电子科技大学2023新生赛 E 树 题解
    Question杭州电子科技大学2023新生赛E树给定一颗包含\(n\)个节点的带边权的树,定义\(xordist(u,v)\)为节点\(u\)到\(v\)的简单路径上所有边权值的异或和有\(q\)次询问,每次给出lrx求\(\sum_{i=l}^rxordist(i,x)\)的值Solution考试的时候脑子坏了对于一条......
  • 【省选联考2020】树 题解
    省选题解第一发~【省选联考2020】树我和这道题还挺有缘分的。有一次看大佬的省选游记(不知道是哪一年),然后提到有一道是01trie整体加一,当时我就印象深刻,然后在oiwiki上看了一下,心想这整体加一也只能从低位到高位维护01trie啊,又不能查询最大值,有什么卵用(划掉)。这是两周前的事......
  • 题解 [SDOI2016] 游戏
    可以看出来出题人很想出一道把李超和别的什么东西凑起来的题目,于是给了这么一个缝合怪。https://www.luogu.com.cn/problem/P4069符号有点混乱。比如箭头又可以表示路径又可以表示赋值,代入语境应该还是好理解的。看到\(a\timesdis+b\)就应激反应出来是李超了,看到\(s\to......
  • CF1884D Counting Rhyme 题解
    Problem-D-CodeforcesCountingRhyme-洛谷法1:我们之前肯定看过这样一道非常经典的题:求\(a_i\)中有多少对\((i,j)\),满足\(\gcd(a_i,a_j)=1\)\(n\leq10^6\)这题是莫反板子题,但显然可以不用莫反做。先不说这题怎么做,我们发现这道题和CF1884D的不同之处在......
  • [ABC334C] Socks 2 题解
    题目传送门一道贪心题。数量为\(2\)的袜子不用考虑,因为最好的情况就是相同颜色的配一对。我们只需要考虑那\(k\)种只有\(1\)个的袜子,如果\(k\)为偶数,答案为相邻两数之差之和;如果\(k\)为奇数,就枚举删掉一个数,让剩下的数按照\(k\)为偶数的情况做,最后取一个最小值。这......