首页 > 其他分享 >CF1833G Ksyusha and Chinchilla 题解

CF1833G Ksyusha and Chinchilla 题解

时间:2024-03-03 18:33:06浏览次数:30  
标签:pre sz CF1833G 连边 题解 Ksyusha id 节点 size

首先,若 \(n \bmod 3 \neq 0\),则一定无解。

考虑 \(n \bmod 3 = 0\) 的情形:

首先肯定是先进行一遍树形 dp,求出树上每个节点 \(x\) 的子树大小 \(size_x\)。

若当前节点的 \(size\) 值 \(=3\),则说明需要切断当前节点于其父节点的连边,使得其子树成为一个大小为 \(3\) 的单独连通块。

于是将 \(cut_{id}\)(\(cut_i\) 表示第 \(i\) 条边是否需要切断,\(id\) 表示当前节点与其父节点连边的编号)设为 \(1\),并且为了方便接下来的处理,将 \(size_x\) 设为 \(0\) 即可。

否则说明这颗子树无法贡献答案的,直接递归回溯即可。

注意多测清空!

核心代码:

//树形dp
void dfs(int x,int pre){ //pre是x的父节点
	sz[x]=1;
	if(!ans) return; //无法贡献答案就递归回溯
	int nid=0;
	for(auto i:G[x]){
		if(i.to==pre) nid=i.id; //记录父节点
		else dfs(i.to,x),sz[x]+=sz[i.to]; //求子树大小
	}
	if(sz[x]==3) sz[x]=0,cut[nid]=1; //切断x和pre间的连边
	else if(sz[x]>3) ans=0; //这颗子树无法贡献答案
}

标签:pre,sz,CF1833G,连边,题解,Ksyusha,id,节点,size
From: https://www.cnblogs.com/XOF-0-0/p/18050428

相关文章

  • ABC343 G Compress Strings 题解
    QuestionABC343GCompressStrings给定\(N\)个字符串\(S_1,S_2,\cdots,S_N\)找到一个包含所有这些字符串作为子字符串的最小长度的字符串一个字符串\(S\)包含一个字符串\(T\)作为子字符串是指:如果\(T\)可以通过从\(S\)的开头删除零个或多个字符以及从末尾删除......
  • AT_abc184_f [ABC184F] Programming Contest 题解
    题目传送门前置知识Meetinthemiddle解法非正解当成超大背包来做,暴力枚举每个数是否进行相加。时间复杂度为\(O(2^{n})\)。llp[50],ans=0;voiddfs(llx,lln,llm,llworth){ if(x==n+1) { if(worth<=m) { ans=max(ans,worth); } } else { if(wo......
  • P2532 [AHOI2012] 树屋阶梯 题解
    P2532[AHOI2012]树屋阶梯题解容易发现答案是卡特兰数,那么考虑证明这一点。考虑从左下角到右上角填满格子。利用动态规划的思想,回忆一下某道\(IOI\)的题目[数字三角形],每个格子的方案都只能由其左边或下边转移而来。可以结合图理解一下。好,刚才这个定义显然很符合卡特兰......
  • CF1931G One-Dimensional Puzzle 题解
    CF1931GOne-DimensionalPuzzle题解题意传送门思路考虑一下怎么入手,发现一个拼图只能接一些拼图(废话但是有用),所以我们可以简单地画出一个链接关系的图,\(u\tov\)表示编号为\(u\)的拼图后面能够接编号为\(v\)的拼图。然后我们发现问题转换为:......
  • AT_joig2021_d 展覧会 2 (Exhibition 2) 题解
    题目传送门前置知识二分答案解法最小值最大,考虑二分答案。关于check函数的书写,比luoguP1182数列分段SectionII多了个对位置的判定,注意对当前是第一次展出时进行特判。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsigne......
  • 牛客练习赛122题解A-D
    牛客练习赛122A.黑白配代码:#include<bits/stdc++.h>usingnamespacestd;constintMAXN=1e5+7;constintINF=0x3f3f3f3f;typedeflonglongll;#defineendl"\n"voidsolve(){ intt,n;cin>>t>>n;inta[n+1];while(t--)......
  • CF1934题解
    题解首先拜谢波叔呀,一眼看上去没思路,直到看见了四重循环,大彻大悟。Solution没什么好说的,暴力四重题意大意就是给你一个数,在1,3,6,10,15中取数,使取出的数等于输入的数,求出至少需要用多少个数。求数代码: for(longlongi=0;i<=2;i++){ for(longlongj=0;j<=1;j++){ for(lo......
  • AT_abc169_f Knapsack for All Subsets题解
    如果我们定义\(dp[i][j]\)表示对于前i个字符而言,其子集满足条件的个数。那4么对于一个位置i而言,要么选择它贡献要么不选择,所以\(dp[i][j]=dp[i-1][j-a[i]](j>=a[i])+dp[i-1][j]\),这是每一个\(f(i)\)的函数。然后我们加上所有的\(dp[i][k](i:1到n)ans+=dp[i][k......
  • CF1383A String Transformation 1 题解
    若某一位\(i\)上\(A_i>B_i\),则显然无解。否则,建立并查集,然后遍历字符串,若\(A_i,B_i\)不在一个集合就合并\(A_i\)与\(B_i\),直到只剩下一个集合,此时的合并总次数即为答案。为什么呢?因为将\(A_i,B_i\)合并的操作可以视为等价于将以\(A_i\)开头的连续若干个相同字符均改......
  • 「TFOI R1」Unknown Graph 题解
    这里是出题人题解。\(\text{SolutionOfProblemC:UnknownGraph.}\)题意还是很清晰的,这里就不再赘述题意了。首先如果没有\(q\)的限制,显然有一种贪心思想就是每个点每次选剩余入度最多的与之连边。但是因为限制,就无法保证贪心的正确性。那该怎么办呢?一个大提示:这题是......