首页 > 其他分享 >dsu on tree 模板

dsu on tree 模板

时间:2024-07-28 20:29:31浏览次数:7  
标签:sz cn int big void dsu tree fa 模板

dsu on tree模板运用

例题以及代码:

U41492 树上数颜色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

Lomsat gelral - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

struct DsuOnTree {
	int n, dfn = 0;
	vector<int> sz, big, L, R, Node;
	vector<vector<int>> g;

	//根据题目要求修改
	i64 Max = 0, now = 0;
	vector<i64> ans, cnt, col;

	DsuOnTree(int n): n(n), sz(n + 1), big(n + 1), L(n + 1), R(n + 1), Node(n + 1) {
		g.resize(n + 1);

		ans.resize(n + 1);
		col.resize(n + 1);
		cnt.resize(n + 1);
	}

	void add(int u, int v) {
		g[u].emplace_back(v);
		g[v].emplace_back(u);
	}

	void add(int u) {
		//计算贡献

	}

	void del(int u) {
		//删除贡献

	}

	i64 getAns() {
		return now;
	}

	void dfs0(int u, int fa) {
		L[u] = ++dfn;
		Node[dfn] = u;
		sz[u] = 1;
		for (int v : g[u])
			if (v != fa) {
				dfs0(v, u);
				sz[u] += sz[v];
				if (!big[u] || sz[big[u]] < sz[v])
					big[u] = v;
			}
		R[u] = dfn;
	}

	void dfs1(int u, int fa, bool keep) {
		// 计算轻儿子的答案
		for (int v : g[u])
			if (v != fa && v != big[u]) {
				dfs1(v, u, false);
			}
		// 计算重儿子答案并保留计算过程中的数据(用于继承)
		if (big[u]) {
			dfs1(big[u], u, true);
		}
		for (int v : g[u])
			if (v != fa && v != big[u]) {
				// 子树结点的 DFS 序构成一段连续区间,可以直接遍历
				for (int i = L[v]; i <= R[v]; i++) {
					add(Node[i]);
				}
			}
		add(u);
		ans[u] = getAns();
		if (keep == false) {
			for (int i = L[u]; i <= R[u]; i++) {
				del(Node[i]);
			}
		}
	}
};

标签:sz,cn,int,big,void,dsu,tree,fa,模板
From: https://www.cnblogs.com/Kescholar/p/18328826

相关文章

  • KD-Tree 学习笔记
    KD-Tree学习笔记建树如果当前超长方体只有一个点,返回这个点选择一个维度(轮流)选择中位数(\(O(n)\))递归应用定理二维KDT中节点代表矩阵与任意一个矩形(边界上)有交的只有\(O(\sqrtn)\)个。证明:考虑一条直线,与KDT的交集,此层最多有两个,递归得到递归式,然后套主定理。......
  • PPT模板替换秘籍:一键撤销原模板,轻松更换新风格!
    将PPT中的模板换成另一个模板,可以通过几种不同的方法实现。以下是几种常用的方法:方法一:使用PowerPoint内置的设计选项卡打开PowerPoint:首先,打开你想要更改模板的PPT文件。选择“设计”选项卡:在PowerPoint的顶部菜单栏中,找到并选择“设计”选项卡。选择新模板:在“设计”选项......
  • 2024牛客多校第四场F.Good Tree 挑战全网最详解
    好吧标题党了一回,但我相信有不少人被出题人的那句“手玩一下就知道了”无语住了像我这种憨憨一旦想偏了就救不回来了,于是困惑了好久,在雨巨的指导下彻底搞懂(此处大声谢谢雨巨,又有实力又会讲题又认真答疑每一个问题,呜呜呜我永远的姐)题意简单来说就是定义f(i)为树上i点到其他所有......
  • CSP-S提高组数据结构算法模板大合集
    CSP-S算法总结2.2.1基础知识与编程环境无2.2.2C++程序设计2set/nultisetmap/multimapdeque/priority_queueSTL2.2.3数据结构P1886 滑动窗口/【模板】单调队列#include<iostream>usingnamespacestd;intn,k,a[1000005];intq[1000005],h,t;......
  • python刷题常用模板
    #=====================================素数筛Begin=====================================#MAXN=1000prime=[]isprime=[True]*(MAXN+1)defeuler():isprime[1]=Falseforiinrange(2,MAXN+1):ifisprime[i]:prime.append(i)......
  • 个人工作述职报告模板PPT转正述职报告通用工作总结汇报范文免费
    不知道怎么写述职报告的同学,可以下载PPT模板,改一改就能用。模板文件一共有几个G,下载可能比较慢,建议选择转存,几秒就能保存全部文件,而且几乎不消耗数据流量。不需要开会员,文件可以免费保存,建议一次选择一个文件夹转存。手机APP保存的文件,可以同步在电脑端查看。 以下是部分述职......
  • 20、flask-进阶-自定义静态文件static和模板文件templates的路径配置
    自定义static目录和templates目录的路径原本flask默认的static和templates目录是在App目录下的:如下图如果想把这两个目录更改位置,如放在根目录下:代码如下:__init__.pyfromflaskimportFlaskfrom.viewsimportbluefrom.extsimportinit_extsimportos#获......
  • 【linux】【设备树】具有 GPIO 控制器和连接器的硬件配置的备树(Device Tree)代码讲解
    具有GPIO控制器和连接器的硬件配置的备树(DeviceTree)代码讲解背景-学习Linux设备树代码soc{soc_gpio1:gpio-controller1{#gpio-cells=<2>;};soc_gpio2:gpio-controller2{#gpio-cells=<2>;};};connector:connect......
  • 如何在flask和jinjia2模板中仅显示一个登录或注销按钮?
    我想在用户登录时显示注销按钮,在用户注销时显示登录按钮。但是这些按钮显示的次数与我有用户的次数一样多。我该如何修复它?--htmlcode{%foruserinusers%}{%ifuser.user_id==session['user_id']%}<liclass="nav-item">......
  • CF1060F Shrinking Tree
    考虑分别以每个点为根计算概率,可以计算所有边固定了收缩顺序的概率之和后除以\((n-1)!\)即为答案设\(f_{x,i}\)表示在\(x\)的子树内,删除最后\(i\)条边前后根的编号不发生变化的概率和,所求即为\(f_{rt,n-1}\)记当前点为\(v\),父节点为\(u\),因为收缩\((u,v)\)时,之前的......