首页 > 其他分享 >我也要板刷 AtCoder!

我也要板刷 AtCoder!

时间:2024-02-07 14:55:06浏览次数:34  
标签:AtCoder 子树 板刷 son cdot dp

板刷 AtCoder ARC C!

[ARC171C] Swap on Tree

Problem

给定一棵 \(n\) 个节点的树,每个点有个权值 \(a_i\),初始时 \(a_i=i\)。

你可以执行任意操作:选择一条边 \((u,v)\),交换 \(a_u\) 和 \(a_v\),并将这条边删掉。

问通过上述操作,最后 \((a_1,a_2,\cdots,a_n)\) 有多少种不同的排列方式,答案对 \(998244353\) 取模。

Tag

树形 dp。

Preface

2024.2.7 做的,大战了一上午。

Solution

树上计数,考虑树形 dp。

首先不妨设是根为 \(1\) 的有根树。一个子树内外来的数一定是从他的父亲来的,并且只能有至多一个,而实际上这个数是什么并不重要。所以考虑一个子树是否有外来的点作为状态。设 \(f_{u,0/1}\) 代表以 \(u\) 为根的子树与父亲有 / 没有交换分别的排列方式数。

对于和父亲没有交换的情况,考虑和 \(u\) 断了哪几条儿子的边,以什么顺序断的。那么有转移:

\[f_{u,0}=\sum_{S\subseteq son_u}|S|!\cdot\prod_{v\in S}dp_{v,1}\cdot\prod_{v\in son_u,v\notin S} \]

标签:AtCoder,子树,板刷,son,cdot,dp
From: https://www.cnblogs.com/0x3b800001/p/18010932/AtCoder

相关文章

  • AtCoder Beginner Contest 339
    AtCoderBeginnerContest339A-TLD签到B-Langton'sTakahashi发现步数和网格范围都不大,直接模拟即可C-PerfectBus题目的合法性在于不能为负数,那么初始人数就有了二分性。二分的找出初始的最小人数,然后跑一边即可#include<bits/stdc++.h>usingnamespacestd;#d......
  • Japan Registry Services (JPRS) Programming Contest 2024 (AtCoder Beginner Contes
    JapanRegistryServices(JPRS)ProgrammingContest2024(AtCoderBeginnerContest339)A-TLD代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__......
  • AtCoder Beginner Contest 339
    A找到最后一个点的位置,使用substr函数。B模拟,记得边界是循环的。C容易发现答案为:\[\min_p(\sum_{i=1}^{p}a_i)+\sum_{i=1}^{n}a_i\]D由于不同状态数只有\(60^4\),容易搜索,但是我去吃饭了,所以没能快速切掉。E有一个显然的dp,然后考虑每一个\(a_i\)可以转移到\(a_j\)......
  • AtCoder Beginner Contest 330
    A-CountingPasses#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingvi=vector<int>;usingi32=int32_t;usingpii=pair<int,int>;#definempmake_pairconstintinf=1e9;i32main(){intn,l;......
  • AtCoder Beginner Contest 339
    基本情况A和C出的比较快但不能说秒了还是思考了几分钟的,然后B很奇怪我样例还有一些测试点都能过,但有些测试点就是过不了...A-TLD貌似没啥说的B-Langton'sTakahashi说实话现在还是不懂我的哪里错了很不科学啊,明明很多测试点都过了啊C-PerfectBus做题时的思路:要想求......
  • Japan Registry Services (JPRS) Programming Contest 2024 (AtCoder Beginner Contes
    //这一场我感觉有了新的蜕变思考问题也变了多种,3题(✌)A-TLD思路:题目本意 Youaregivenastring S, Printthelastsubstringwhen S issplitby .s给你一个字符串输出最后的点的网址(类似)的后缀,入坑点没有,题意简单。思路方法:最后一个‘.’为停止符号,倒的字符串......
  • AtCoder Beginner Contest 339
    基本情况ABC秒了,D读错题卡了一段时间,还好爆搜强项,E感觉极其类似LIS,但是似乎又不能用二分DP来写。E感觉极其类似LIS,但是暴力DP肯定T,又知道不能用二分优化事实如此,确实类似LIS,但是通过线段树来维护区间最大值.暂时还没有熟练线段树,先用atc的库来平替.实现上就是将元素依次......
  • Atcoder Beginner Contest 339 解题报告
    AtcoderBeginnerContest339场评:B>C,D>E,F>G,中国选手最擅长的G,集体上分。A-TLDSimulate.strings;voidSolve(){ charc; while(cin>>c) { if(c=='.')s=""; elses+=c; } cout<<s;}B-Langton'sTakahashiSimulat......
  • AtCoder Beginner Contest 339
    A-TLD(abc339A)题目大意给一个网址,问它的后缀是多少。解题思路找到最后的'.'的位置,然后输出后面的字符串即可。python可以一行。神奇的代码print(input().split('.')[-1])B-Langton'sTakahashi(abc339B)题目大意二维网格,上下左右相连,左上原点。初始全部为......
  • AtCoder Beginner Contest 333
    ABC334总结https://atcoder.jp/contests/abc333A-ThreeThrees翻译输入一个正整数\(n\),输出\(n\)遍这个正整数。\(1\len\le9\)。分析没啥好说的,直接输出就好了。code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intn;intmain()......