有 \(n\) 个点的树,给定 \(m\) 次操作,每个点对应一个集合,初态下只有自己。

第 \(i\) 次操作给定参数 \(p_i\),意为把 \(p_i\) 这条边的两个点的集合合并,并分别发配回这两个点

最后求每个点出现在多少个集合中

Solution

换个问题,求每个集合最后的大小。我们发现,如果将 \(u,v\) 合并,那么 \(f[u]=f[v]=f[u]+f[v]-f[u] \bigcap f[v]\)

而 \(f[u] \bigcap f[v]\) 之和上一次 \(u,v\) 合并的结果有关,于是我们可以对每条边单独记录一个数,表示上一次合并这条边的结果

回到原问题,我们发现,每个点被哪些集合包含,只需要倒叙处理新问题就可以得到原问题的答案

#include <bits/stdc++.h>
using namespace std; const int N = 1000005; int n,m,p[N],x[N],y[N],f[N],g[N]; void read(int &x) {
scanf("%d",&x);
} void write(int x,int flag) {
printf("%d",x);
if(flag==0) putchar(' ');
else puts("");
} signed main() {
read(n);read(m);
for(int i=1;i<n;i++) read(x[i]), read(y[i]);
for(int i=1;i<=m;i++) read(p[i]);
for(int i=1;i<=n;i++) f[i]=1;
for(int i=m;i>=1;--i) {
int u=x[p[i]], v=y[p[i]];
f[u]=f[v]=f[u]+f[v]-g[p[i]];
g[p[i]]=f[u];
}
for(int i=1;i<=n;i++) write(f[i],i==n);
}

Wannafly Winter Camp 2020 Day 5B Bitset Master - 时间倒流的更多相关文章

  1. Wannafly Winter Camp 2020 Day 5J Xor on Figures - 线性基,bitset

    有一个\(2^k\cdot 2^k\) 的全零矩阵 \(M\),给出 \(2^k\cdot 2^k\) 的 \(01\) 矩阵 \(F\),现在可以将 \(F\) 的左上角置于 \(M\) 的任一位置 ...

  2. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  3. Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学

    于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...

  4. Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组

    给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...

  5. Wannafly Winter Camp 2020 Day 6J K重排列 - dp

    求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...

  6. Wannafly Winter Camp 2020 Day 6I 变大! - dp

    给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...

  7. Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分

    给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...

  8. Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心

    对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...

  9. Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学

    给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...

随机推荐

  1. [Jinja2]本地加载html模板

    import os from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader ...

  2. Codevs 1205 单词反转(Vector以及如何输出string)

    题意:倒序输出句子中的单词 代码: #include<cstdio> #include<iostream> #include<string> #include< ...

  3. 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析

    不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08       ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...

  4. .Net Core中IOC容器的使用

    打代码之前先说一下几个概念,那就是什么是IOC.DI.DIP 虽然网上讲这些的已经有很多了,我这里还是要再赘述一下 IOC容器就是一个工厂,负责创建对象的 IOC控制反转:只是把上端对下端的依赖,换成 ...

  5. Jmeter之上传文件

    前言 我们可以利用postman工具来测试上传文件的接口,那么假如要利用Jmeter工具来进行上传接口的测试,又该如何测试呢? 上传文件的接口地址:/pinter/file/api/upload:接口 ...

  6. ubuntu docker中crontab任务不执行的问题

    problem of task of crontab in docker of ubuntu do not working! 由于各种原因,要在Ubuntu docker上部署crontab任务,如 ...

  7. 使用Git和Svn

    一. 使用SVN 1. 下载tortoiseSVN 2. 右键SVN checkout(下载项目到本地) 3. 更新和提交 二. 使用GIT 1. 下载git 2. 下载tortoiseGit 3. ...

  8. 普通台式机装centos7系统

    一.环境 台式机配置如下: 配置:CPU -i5-7400 内存:8G 硬盘:1T 原装系统: win7 64x 使用软碟通刻录U盘做系统启动盘,教程: 教你用UltraISO+U盘制作启动盘和安装各 ...

  9. 自动化测试中,cookie的调用方法。

    以cookie为例 方法一: 将返回的cookie写到setUp()中,每次执行用例之前就会调用一次. 如: class AA(unittest.TestCase): def setUp(self): ...

  10. 基于 webGL 的元素周期表 3D 交互展示

    前言 之前在网上看到别人写的有关元素周期表的文章,深深的勾起了一波回忆,记忆里初中时期背的“氢氦锂铍硼,碳氮氧氟氖,钠镁铝硅磷,硫氯氩钾钙”.“养(氧)龟(硅)铝铁盖(钙),哪(钠)家(钾)没(镁)青 ...