[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序+线段树了.而对于第二个操作,考虑再维护一 ...
随机推荐
- js获得页面鼠标位置
1.客户区坐标位置:clientX,clientY 鼠标相对于在当前页面可视范围左上角的位置 2.页面坐标位置:pageX,pageY 鼠标相对于页面左上角的位置(受滑动等影响,例如pageY=cli ...
- 2017ACM暑期多校联合训练 - Team 7 1002 HDU 6121 Build a tree (深搜+思维)
题目链接 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n− ...
- 服务器端包含 SSI简介
服务器端包含 SSI,是英文 Server Side Includes的简写.SSI是一种可以指挥服务器动态声称网页内容的HTML指令. 通常SSI可以用来确保网页中的一些通用内容,比如版权信息.联系 ...
- 深入理解Spring系列之五:BeanDefinition装载
转载 https://mp.weixin.qq.com/s/1_grvpJYe8mMIAnebMdz9Q 接上篇<深入理解Spring系列之四:BeanDefinition装载前奏曲>,进 ...
- eWebEditor复制粘贴图片时过滤域名
1.找到form.js 路径:plugins/frame/scripts/form.js 这个方法: 2.替换这个方法 /** * 处理参数 */ Form.prototype.processReqP ...
- socket 开发 - 那些年用过的基础 API
---------------------------------------------------------------------------------------------------- ...
- centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题。
centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题. 原因:yum调用Python,启动程/usr/bin/yum就是一个python ...
- C/C++——C语言数组名与指针
版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可 ...
- 使用jolokia api监控ActiveMQ
jolokia api提供了一种通过HTTP访问JMX获得AMQ后台数据的一种方式,即Restful Api #!/usr/bin/env python # -*- coding:utf-8 -*- ...
- 使用 redis 减少 秒杀库存 超卖思路
由于数据库查询的及插入的操作 耗费的实际时间要耗费比redis 要多, 导致 多人查询时库存有,但是实际插入数据库时却超卖 redis 会有效的减少相关的延时,对于并发量相对较少的 可以一用 publ ...