[Codeforces 1060F] Shrinking Tree
Link:
Solution:
原来CF的官方题解也能鸽啊……
该题思路:
1、对于每个点删边方案数为$fac[n-1]$,总贡献为每种方案下满足的概率的和,接下来直接求贡献
2、每次将该点看成根,树形$dp$,设$dp[i][j]$表示根到$i$该子树还有$j$条边的贡献
3、考虑合并子树(算上根到子树的边),由于两边互不影响,相乘后再乘上删边顺序不同的组合数皆可
$dp[v1][i]*dp[v2][j]*C(i+j,i)*C((sz[v1]-1-i)+(sz[v2]-1-j),sz[v1]-1-i)$
4、考虑用子树答案$dp[i]$算出加上子树根到其父亲的边后$cur[j]$的答案
$j>i$时为了不重复计算,变数只有最后$u,v$的合并,产生的贡献为$0.5*dp[i]$
$j=i$时考虑$u,v$合并和$sz[v]-1-i$条边的删除顺序任意,产生贡献为$(sz[v]-i)*dp[i]$
Code:
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=;
struct edge{int nxt,to;}e[MAXN<<];
int n,x,y,head[MAXN],sz[MAXN],tot;
db cur[MAXN],tmp[MAXN],dp[MAXN][MAXN],fac[MAXN]; void add(int x,int y)
{e[++tot]=(edge){head[x],y};head[x]=tot;}
db C(int x,int y)
{return fac[x]/(fac[x-y]*fac[y]);}
db solve(int x,int y)
{return C(x+y,x);}
void dfs(int x,int anc)
{
sz[x]=;dp[x][]=;
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=anc)
{
dfs(e[i].to,x);
memset(cur,,sizeof(cur));
memset(tmp,,sizeof(tmp));
for(int j=;j<=sz[e[i].to];j++)
{
for(int k=;k<j;k++)
cur[j]+=0.5*dp[e[i].to][k];
cur[j]+=(sz[e[i].to]-j)*dp[e[i].to][j];
} for(int j=;j<sz[x];j++)
for(int k=;k<=sz[e[i].to];k++)
tmp[j+k]+=dp[x][j]*cur[k]*solve(j,k)*solve(sz[e[i].to]-k,sz[x]--j);
for(int j=;j<sz[x]+sz[e[i].to];j++) dp[x][j]=tmp[j];
sz[x]+=sz[e[i].to];
}
} int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d%d",&x,&y),add(x,y),add(y,x);
fac[]=;
for(int i=;i<=n;i++) fac[i]=fac[i-]*i;
for(int i=;i<=n;i++)
dfs(i,),printf("%.10lf\n",dp[i][n-]/fac[n-]);
return ;
}
[Codeforces 1060F] Shrinking Tree的更多相关文章
- Problem - D - Codeforces Fix a Tree
Problem - D - Codeforces Fix a Tree 看完第一名的代码,顿然醒悟... 我可以把所有单独的点全部当成线,那么只有线和环. 如果全是线的话,直接线的条数-1,便是操作 ...
- Codeforces 1060 F. Shrinking Tree
题目链接 一道思维好题啊...感觉这种类型的题很检验基本功是否扎实(像我这样的就挂了). 题意:你有一棵\(n\)个点的树,每次随机选择一条边,将这条边的两个端点合并,并随机继承两个点标号中的一个,问 ...
- Solution -「CF 1060F」Shrinking Tree
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树,反复随机选取一条边,合并其两端两点,新点编号在两端两点等概率选取.问每个点留到最后的概率. ...
- Codeforces 765 E. Tree Folding
题目链接:http://codeforces.com/problemset/problem/765/E $DFS子$树进行$DP$ 大概分以下几种情况: 1.为叶子,直接返回. 2.长度不同的路径长度 ...
- codeforces 570 D. Tree Requests 树状数组+dfs搜索序
链接:http://codeforces.com/problemset/problem/570/D D. Tree Requests time limit per test 2 seconds mem ...
- CodeForces 383C Propagating tree
Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...
- 【19.77%】【codeforces 570D】Tree Requests
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- Codeforces 343D Water Tree(DFS序 + 线段树)
题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...
随机推荐
- 浅析 Spring Aop
aop也是Spring里比较重要的一个点,最近把源码看了下,这里总结一下 使用上主要就下面的点注意下: 相关的Annotaion Around Before After AfterReturning ...
- c++刷题(6/100)最长上升子序列
题目一:区间子数组个数 给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R). 求连续.非空且其中最大元素满足大于等于L 小于等于R的子数组个数. 例如 : 输入: A = ...
- SaltStack 使用笔记
centos 7安装yum -y install epel-releaseyum clean allyum makecacheyum -y install salt-minionsed -i 's/# ...
- ubuntu16.04中启动anaconda图形化界面
$ source ~/anaconda3/bin/activate root $ anaconda-navigator
- 一款基于react-native的弹窗提示组件
介绍一款基于react-native的弹窗提示插件 react-native-ms , github地址:https://github.com/jiangzhenfei/react-native-ms ...
- 看到了一篇博文,关于网卡的sniff模式,感觉相当好
@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }@ ...
- 实现UE添加自定义按钮之添加菜单
1.ueditor.config.js配置文件中配置 2.在ueditor.all.js配置文件中配置点开的的弹框位置 3.在ueditor1_4_3-utf8-jsp\themes\default\ ...
- 使用xbee连接地面站和飞控
Zigbee是一种短距离.低功耗的近距离无线组网通讯技术,主要适用于自动控制和远程控制领域,可以嵌入各种设备. DIGI的ZigBee产品XBee小型但却是一个功能完善的ZigBee收发器(即接收器/ ...
- 1、CentOS 6 安装GitLab
1.安装和配置必需的依赖项 在CentOS上将系统防火墙打开HTTP和SSH访问. sudo yum install -y curl policycoreutils-python openssh-se ...
- Java容器概述
如果一个程序只包含固定数量的且其生命期都是己知的对象. 那么这是一个非常简单的程序. 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型.为解 ...