4.19 ABC F path pass i 容斥 树形dp
LINK:path pass i
原本想了一个点分治 yy了半天 发现重复的部分还是很难减掉 况且统计答案的时候有点ex.
(点了别人的提交记录 发现dfs就过了
于是yy了一个容斥 发现可以直接减掉不合法方案。
对于某个点的总方案 :\(1+\frac{n\cdot (n-1)}{2}\)
考虑不合法方案 可以发现在树上 我们按顺序便利树 不合法的情况只有两个颜色相同的点之间的那部分的点对不合法。
以及 最后靠上的那部分点的点对是不合法的。
所以 我们统计这些不合法点对的方案即可。
值得注意的是 最后靠上的那部分要注意减掉。
const int MAXN=200010;
int n,len;
ll ans[MAXN];
int a[MAXN],sz[MAXN],s[MAXN];
int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
inline void add(int x,int y)
{
ver[++len]=y;
nex[len]=lin[x];
lin[x]=len;
}
inline ll SUM(int x){return (ll)x*(x-1)/2;}
inline void dfs(int x,int father)
{
sz[x]=1;int ss=s[a[x]],pre=s[a[x]];
go(x)
{
if(tn==father)continue;
dfs(tn,x);
sz[x]+=sz[tn];
ans[a[x]]-=SUM(sz[tn]-(s[a[x]]-pre));
pre=s[a[x]];
}
s[a[x]]=ss+sz[x];
}
int main()
{
freopen("1.in","r",stdin);
get(n);
rep(1,n,i)get(a[i]),++ans[a[i]],ans[i]+=SUM(n);
rep(2,n,i)
{
int get(x);int get(y);
add(x,y);add(y,x);
}
dfs(1,0);
rep(1,n,i)ans[i]-=SUM(n-s[i]);
rep(1,n,i)putl(ans[i]);
return 0;
}
4.19 ABC F path pass i 容斥 树形dp的更多相关文章
- 【BZOJ-4455】小星星 容斥 + 树形DP
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 137[Submit][Status] ...
- BZOJ 4455: [Zjoi2016]小星星(容斥+树形dp)
传送门 解题思路 首先题目中有两个限制,第一个是两个集合直接必须一一映射,第二个是重新标号后,\(B\)中两点有边\(A\)中也必须有.发现限制\(2\)比较容易满足,考虑化简限制\(1\).令\(f ...
- [LOJ2542][PKUWC2018]随机游走(MinMax容斥+树形DP)
MinMax容斥将问题转化为求x到S中任意点的最小时间. 树形DP,直接求概率比较困难,考虑只求系数.最后由于x节点作为树根无父亲,所以求出的第二个系数就是答案. https://blog.csdn. ...
- hdu-5794 A Simple Chess(容斥+lucas+dp)
题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 浅析容斥和DP综合运用
浅析容斥和DP综合运用 前言 众所周知在数数题中有一种很重要的计数方法--容斥.但是容斥有一个很大的缺陷:枚举子集的复杂度过高.所以对于数据规模较大的情况会很乏力,那么我们就只能引入容斥DP. 复习一 ...
- 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- 洛谷P5206 [WC2019]数树 [容斥,DP,生成函数,NTT]
传送门 Orz神仙题,让我长了许多见识. 长式子警告 思路 y=1 由于y=1时会导致后面一些式子未定义,先抓出来. printf("%lld",opt==0?1:(opt==1? ...
- [HAOI2017]方案数[组合计数、容斥、dp]
题意 题目链接 分析 先考虑没有障碍怎么做,定义 f(i,j,k) 每一维走了 i,j,k 位的方案数,转移乘个组合数即可. 现在多了一些障碍,考虑容斥.实际我们走过的点都有严格的大小关系,所以先把所 ...
随机推荐
- 如何Simplest搭建个人博客
前期 例如wordpress.hexo.hugo-- 准备 安装Node.js,安装Git,进入Hexo网站.进入Github网站进注册和登录. 建议买个阿里云服务器(学生最近好像是免费的) 开始搭建 ...
- Docker 安装并使用mysql
上一篇介绍了Docker在CentOS中的安装,本文介绍如何在Docker中安装并使用mysql 1.拉取最新的mysql镜像 [root]# docker pull mysql 2.查看已有镜像 [ ...
- python中pymysql executemany 批量插入数据
import pymysqlimport timedb = pymysql.connect("IP","username","password&quo ...
- web 安全之页面解析的流程学习
0x00 任务内容: 理解域名解析的整个过程 理解 web 页面请求的整个流程,绘制流程图(nginx 处理的 11 个过程) 学习 http 协议中的字段及含义 学习 http 请求方法以及返回状态 ...
- python 并发专题(三):进程以及进程池相关以及实现
一.多进程实现 multiprocess.process模块 process类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类 ...
- 数据分析,numpy pandas常用api记录
1. np.percentile(train_list["wnum1"], [10, 90, 95, 99]) 计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列 2 ...
- 浏览器常见攻击方式(XSS和CSRF)
常见的浏览器攻击分为两种,一种为XSS(跨站脚本攻击),另一种则为CSRF(跨站请求伪造). XSS(跨站脚本攻击) 定义 XSS 全称是 Cross Site Scripting,为了与“CSS”区 ...
- Java批量入库Demo
java中往数据库批量插入数据Demo java代码: //入库数据是需要批量入库的List int len =入库数据.size(); //每次循环10条 int incremnet = 10; / ...
- proxy是什么
普通的因特网访问是一个典型的客户机与服务器结构:用户利用计算机上的客户端程序,如浏览器发出请求,远端WWW服务器程序响应请求并提供相应的数据.而Proxy处于客户机与服务器之间,对于服务器来说,Pro ...
- 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选
在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...