首页 > 其他分享 >Codeforces - 1656E - Equal Tree Sums(构造 + 树论 + 图论 + 搜索、结论题、*2200)

Codeforces - 1656E - Equal Tree Sums(构造 + 树论 + 图论 + 搜索、结论题、*2200)

时间:2023-01-07 22:55:22浏览次数:68  
标签:2200 1656E Tree Sums Equal int 节点

1656E - Equal Tree Sums(⇔源地址



目录






tag

⇔*2200、⇔构造、⇔树论、⇔图论、⇔搜索、⇔结论题


题意

给定一个包含 \(N\) 个节点的无根树。请给这棵树上的每个点赋一个绝对值不超过 \(10^5\) 的非零权值,使得当树上任意一个节点被移除时,所有连通块的点权和相等。


思路

首先,这里有一个结论,即将树进行黑白染色,对于黑色点 \(x\) ,其点权为 1 * deg[x] ;对于白色点 \(y\) ,其点权为 -1 * deg[x] 。**这样操作过后,整棵树的点权和为 \(0\) **。

证明如下:

对于一条边 \((x,y)\) ,\(x,y\) 的颜色相反,假设 \(x\) 为白色,那么这一条边会给 \(x\) 贡献 \(1\) ,会给 \(y\) 贡献 \(-1\) ,恰好抵消。这一论证对于所有的边均成立,故点权和为 \(0\) 。

可以证明,这样的赋值方式同时能够满足题意,证明如下。

假设树上某个节点 \(x\) 被移除后,所有节点的点权值可以改变,我们发现,改变的点均为 \(x\) 的父亲节点或是孩子节点,改变的值为 \(1\) 或 \(-1\) ,符号与 \(x\) 的颜色相关。改变后,所有连通块的点权和依旧相等,且为 \(0\) 。

再考虑点 \(x\) 移除后锁头节点的点权值不能发生改变,我们发现,这一操作对所有连通块点权和的贡献是相等的,均为 \(1\) 或 \(-1\) ,符号与 \(x\) 的颜色相关。


AC代码

点击查看代码
namespace G {
	vector<int> ver[N];
	int deg[N], ans[N], vis[N];
	
	void clear(int n) {
		for (int i = 1; i <= n; ++ i) {
			ver[i].clear();
			deg[i] = vis[i] = ans[i] = 0;
		}
	}
	void add(int x, int y) {
		ver[x].push_back(y);
		++ deg[y];
	}
	void dfs(int x, int p) {
		vis[x] = 1;
		if (p) ans[x] = deg[x];
		else ans[x] = -deg[x];
		for (auto y : ver[x]) {
			if (vis[y]) continue;
			dfs(y, 1 - p);
		}
	}
	void solve(int n) {
		dfs(1, 1);
		for (int i = 1; i <= n; ++ i) cout << ans[i] << " ";
		cout << endl;
	}
}
bool Solve() {
	int n; cin >> n;
	for (int i = 1, x, y; i < n; ++ i) {
		cin >> x >> y;
		G::add(x, y), G::add(y, x);
	}
	G::solve(n);
	G::clear(n);
	return 0;
}

错误次数:0






文 / WIDA
2023.01.07 成文
首发于WIDA个人博客,仅供学习讨论

标签:2200,1656E,Tree,Sums,Equal,int,节点
From: https://www.cnblogs.com/WIDA/p/17033797.html

相关文章

  • [ABC264Ex] Perfect Binary Tree 题解
    [ABC264Ex]PerfectBinaryTreeSolution目录[ABC264Ex]PerfectBinaryTreeSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面存在一......
  • Tree 树分治
    //题意:询问一棵树上长度不超过k的简单路径有多少条//思路:貌似可以用dsuontree但好像要用到平衡树之类的,之后再看看//https://tqltqltqlorzorzorz.blog.luogu......
  • Race dsu on tree写法
    //跑不过,不知道为啥,感觉逻辑都很正确了//题意:给出一棵带边权的树,询问一条权值为k的路径经过点的最小值是多少//思路:因为涉及到最小值问题,所以树性dp好像不行(其实暂时......
  • 单细胞 | CNV和SNV(genome + MT)推测lineage tree
     正式进入cancergenomics领域,只不过是从scRNA-seq与scATAC-seq入手。我们的问题是如何从有限的SNV和CNV数据里推测出CRC的lineage的关系。 使用的工具:https://git......
  • C#(Java)将List集合构建成Tree树
    C#(Java)将List集合构建成Tree树子安树构建算法,可以通过空间换时间进一步优化速度树结构的类publicclassMyTreeNode{publicMyTreeNode(long?iD,long?pare......
  • NERDtree 快捷键
    NERDtree操作指令ctrl+w+h光标focus左侧树形目录ctrl+w+l光标focus右侧文件显示窗口ctrl+w+w光标自动在左右侧窗口切换ctrl+w+r......
  • C#实现treeview节点上下左右自由移动
    以下是节点移动类NodeMove.cs源码:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Collections;namespaceNo......
  • C#实现TreeView向XML的绝对转换类
    从第一次接触XML开始就想写一个能实现tree和XML灵活转换的类了。写这个类大概用去了将近半天的时间,花的时间有些长了。呵呵。。好在收获颇多,熟练了XML的读写类,对C#中的forea......
  • ExtJS-UI组件-TreePanel
    ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587500.html更新记录2023年1月2日从笔记迁移到......
  • element ui --el-select 嵌套el-tree多选联动、删除联动
    需求:el-select下拉框嵌套el-tree树形组件完成多选、删除、搜索、清空选项等联动功能。特殊需求:(当子节点全部选中时el-select中只展示父节点tag,el-tree组件父子节点全......