Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)

时间:2023-01-11 07:47:00

D. Nauuo and Circle

•参考资料

  [1]:https://www.cnblogs.com/wyxdrqc/p/10990378.html

题意

  给出你一个包含 n 个点的树,这 n 个点编号为 1~n;

  给出一个圆,圆上放置 n 个位置,第 i 个位置对应树中的某个节点,并且不重复;

  求在圆上还原这棵树后,使得边不相交的总方案数;

题解

  Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)

  ①为何每一颗子树一定是连续的一段圆弧?

    假设不是连续的圆弧,如图所示:

    Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)

    为了使 x 接到树上,必然会有 x-y 或 x-z 相连的边,这样就会出现交点;

  ②对于以 u 为根的子树,假设 u 有两个儿子 a,b,那么,需要找连续的 x+y+1 个位置放置这些节点;

    Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)

    (x:以a为根节点的子树节点个数,y:以b为根节点的子数的节点个数)

    也就是图中的sum1,sum2,sum3位置;

    u可以放在这三个位置的任意一个位置,a 从剩余的两个位置中选,b只有一个位置可选;

    总的方案数为 3!;

    但是每个方案中 a,b 都有排列方案,故需要乘上 fa×fb;

    对于树的根节点 1,一共有 n 个位置可放,求出其中一个的方案数 f1,答案就是 n×f1

Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
#define memF(a,b,n) for(int i=0;i <= n;a[i++]=b);
const int maxn=2e5+;
const int MOD=; int n;
int num;
int head[maxn];
struct Edge
{
int to,next;
}G[maxn<<];
void addEdge(int u,int v)
{
G[num]=Edge{v,head[u]};
head[u]=num++;
}
ll fact[maxn];
ll dp[maxn];///与f函数功能相同
vector<int >son[maxn];
void DFS(int u,int f)
{
for(int i=head[u];~i;i=G[i].next)
{
int v=G[i].to;
if(v == f)
continue; son[u].push_back(v);
DFS(v,u);
} int k=son[u].size()+(u != ? :);///如果u=1就不用再找u可放置的位置,因为1已经被固定了
dp[u]=fact[k];
for(int i=;i < son[u].size();++i)
dp[u]=dp[u]*dp[son[u][i]]%MOD;
}
ll Solve()
{
for(int i=;i <= n;++i)
son[i].clear(); DFS(,); return dp[]*n%MOD;
}
void Init()
{
num=;
memF(head,-,n);
fact[]=;
for(int i=;i <= n;++i)
fact[i]=(i*fact[i-])%MOD;
}
int main()
{
scanf("%d",&n);
Init();
for(int i=;i < n;++i)
{
int u,v;
scanf("%d%d",&u,&v);
addEdge(u,v);
addEdge(v,u);
}
printf("%lld\n",Solve());
return ;
}

Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)的更多相关文章

  1. Codeforces Round &num;564 &lpar;Div&period; 2&rpar; C&period; Nauuo and Cards

    链接:https://codeforces.com/contest/1173/problem/C 题意: Nauuo is a girl who loves playing cards. One da ...

  2. Codeforces Round &num;564 &lpar;Div&period; 2&rpar; B&period; Nauuo and Chess

    链接:https://codeforces.com/contest/1173/problem/B 题意: Nauuo is a girl who loves playing chess. One da ...

  3. Codeforces Round &num;564 &lpar;Div&period; 2&rpar; A&period; Nauuo and Votes

    链接:https://codeforces.com/contest/1173/problem/A 题意: Nauuo is a girl who loves writing comments. One ...

  4. Codeforces Round &num;196 &lpar;Div&period; 2&rpar; D&period; Book of Evil 树形dp

    题目链接: http://codeforces.com/problemset/problem/337/D D. Book of Evil time limit per test2 secondsmem ...

  5. Codeforces Round &num;382 &lpar;Div&period; 2&rpar; 继续python作死 含树形DP

    A - Ostap and Grasshopper zz题能不能跳到  每次只能跳K步 不能跳到# 问能不能T-G  随便跳跳就可以了  第一次居然跳越界0.0  *哦  WA1 n,k = map ...

  6. Codeforces Round &num;263 Div&period;1 B Appleman and Tree --树形DP【转】

    题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...

  7. Codeforces Round &num;419 &lpar;Div&period; 1&rpar; C&period; Karen and Supermarket 树形DP

    C. Karen and Supermarket     On the way home, Karen decided to stop by the supermarket to buy some g ...

  8. Codeforces Round &num;564 &lpar;Div&period; 1&rpar;

    Codeforces Round #564 (Div. 1) A Nauuo and Cards 首先如果牌库中最后的牌是\(1,2,\cdots, k\),那么就模拟一下能不能每次打出第\(k+i\ ...

  9. Codeforces Round &num;267 &lpar;Div&period; 2&rpar; C&period; George and Job(DP)补题

    Codeforces Round #267 (Div. 2) C. George and Job题目链接请点击~ The new ITone 6 has been released recently ...

随机推荐

  1. MAVEN学习笔记-maven的获取和安装

      windows下maven的安装步骤:      1.下载压缩包http://maven.apache.org/download.cgi选择apache-maven-3.3.9-bin.zip下载 ...

  2. activity的启动模式

    有四种启动模式:standard.singleTop.singleTask.singleInstance. 可在AndroidManifest.xml设置android:launchMode属性,如: ...

  3. PHP&plus;jQuery 注册模块的改进之一:验证码存入SESSION

    /* ******* Date:2014-09-28 ******* Author:小dee ******* Blog:http://www.cnblogs.com/dee0912/*/ 对上一篇博文 ...

  4. PKUSC 模拟赛 day1 上午总结

    思考了一下第二题,觉得有无数种乱搞做法 类似什么bitset压位,MCS染色之类奇怪的做法 然而都是玄学正确性或者玄学复杂度 先放题解把 第一题显然具有单调性,二分就可以啦 O(nlogn),貌似输出 ...

  5. 为ubuntu只带的network-manager添加latp&sol;ipsec VPN

    sudo apt-add-repository ppa:seriy-pr/network-manager-l2tp sudo apt-get update sudo apt-get install n ...

  6. Centos安装webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...

  7. MapReduce模型探究--总览

    先从宏观上了解一下MR运行机制. 两个干活的: (1)jobtracher:管理和调度job (2)tasktracher: 执行job划分后的task client提交MR作业后,jobtrache ...

  8. 【自用】bat ftp下载前一天备份

    @echo off rem 指定FTP用户名 set ftpUser=app rem 指定FTP密码 set ftpPass=app rem 指定FTP服务器地址 set ftpIP=192.168. ...

  9. 107&period; Binary Tree Level Order Traversal II&lpar;Tree&comma; WFS&rpar;

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  10. LUIS 语义识别API调用方法

    本例使用itchat获取微信文字消息,发送给LUIS返回识别消息,再将返回消息格式化后通过微信发回 关于itchat的使用参考我的另外一篇随笔itchat个人练习 语音与文本图灵测试例程 # -*- ...