[CF901D] Weighting a Tree 题解
想象力惊人的想到生成树,因此对于一种 \(c\) 序列,容易求出只有根不满足要求的构造,且只有树边有权。考虑通过非树边们修改根。
对于一条非树边(都是返祖边),假如我们给它的权值 \(+1\),那么对于奇环来说,\(\Delta root=\pm 2\);偶环没有变化。
所以我们直接找到奇环,分别尝试两种情况即可。时间复杂度 \(O(n)\)。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,dep[N],fx,fy,fb,u[N],v[N];
long long c[N],ans[N],wt[N];
struct edge{int to,id;};
vector<edge>ve[N],g[N];
void dfs1(int x){
for(auto y:ve[x]) if(!dep[y.to])
g[x].push_back(y),dep[y.to]=dep[x]+1,dfs1(y.to);
}void dfs2(int x){
wt[x]=0;for(auto y:g[x])
dfs2(y.to),wt[x]+=(ans[y.id]=c[y.to]-wt[y.to]);
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1,x,y;i<=m;i++){
cin>>x>>y,ve[y].push_back({x,i});
ve[u[i]=x].push_back({v[i]=y,i});
}dfs1(dep[1]=1),dfs2(1);long long dt=wt[1]-c[1];
if(dt){
for(int i=1;i<=m;i++)
if(abs(dep[u[i]]-dep[v[i]])%2==0)
fx=u[i],fy=v[i],fb=i;
if(!fb) return cout<<"NO",0;
c[fx]-=dt/2,c[fy]-=dt/2,dfs2(1);
if(wt[1]!=c[1])
c[fx]+=dt,c[fy]+=dt,dfs2(1),ans[fb]=-dt/2;
else ans[fb]=dt/2;
}cout<<"YES\n";
for(int i=1;i<=m;i++)
cout<<ans[i]<<"\n";
return 0;
}
[CF901D] Weighting a Tree 题解的更多相关文章
- Codeforces Round #530 (Div. 2):D. Sum in the tree (题解)
D. Sum in the tree 题目链接:https://codeforces.com/contest/1099/problem/D 题意: 给出一棵树,以及每个点的si,这里的si代表从i号结 ...
- POJ 1308 Is It A Tree?--题解报告
Is It A Tree? Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31092 Accepted: 10549 D ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Codeforces Round #453 (Div. 1) D. Weighting a Tree(构造)
题意 一个 \(n\) 个点 \(m\) 条边的无向连通图中每个点都有一个权值,现在要求给每条边定一个权值,满足每个点的权值等于所有相连的边权之和,权值可负. 题解 如果图是一棵树,那么方案就是唯一的 ...
- 【文文殿下】CF1098C Construct a tree 题解
题解 挺水的一道题. Rating $ \color{orange} {2300}$ 以下送命题. 首先我们知道,所有子树大小之和就是节点个数加上从根到所有节点的路径长度之和. 他要求度数尽可能小,所 ...
- BZOJ2588:Count on a tree——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2588 Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你 ...
- CC TSUBSTR:Substrings on a Tree——题解
https://www.codechef.com/problems/TSUBSTR https://vjudge.net/problem/CodeChef-TSUBSTR 给一棵点权为字母的树,你只能 ...
- 【日常学习】【二叉树遍历】Uva548 - Tree题解
这道题目本身不难,给出后序遍历和中序遍历,求到节点最小路径的叶子,同样长度就输出权值小的叶子. Uva上不去了,没法測.基本上是依照ruka的代码来的.直接上代码 //Uva548 Tree #inc ...
- SPOJ - QTREE Query on a tree题解
题目大意: 一棵树,有边权,有两个操作:1.修改一条边的权值:2.询问两点间路径上的边的权值的最大值. 思路: 十分裸的树链剖分+线段树,无非是边权要放到深度大的一端的点上,但是有两个坑爹的地方,改了 ...
- 洛谷 P2633 Count on a tree 题解
题面 对于每个点建立一颗主席树: 然后按照树上差分的思想统计主席树的前缀和: lca+主席树+前向星存表就可以了: #include <bits/stdc++.h> #define inc ...
随机推荐
- 零基础学习人工智能—Python—Pytorch学习(十一)
前言 本文主要介绍tensorboard的使用. tensorboard是一个可视化的,支持人工智能学习的一个工具. tensorboard的官方地址:https://www.tensorflow.o ...
- QEMU CVE-2021-3947 和 CVE-2021-3929 漏洞利用分析
QEMU CVE-2021-3947 和 CVE-2021-3929 漏洞利用分析 CVE-2021-3947 信息泄露漏洞 漏洞分析 漏洞点是 nvme_changed_nslist stati ...
- 有关IOS内存读写冲突
有关IOS内存读写冲突 在写内存相关代码时,获取已使用内存代码中报错 let hostPort: mach_port_t = mach_host_self() var host_size = mach ...
- function keyword is non-standard. Delete it.
SC2112 – ShellCheck Wiki See this page on GitHub function keyword is non-standard. Delete it. Proble ...
- MyBatis-Plus乐观锁: Parameter ‘MP_OPTLOCK_VERSION_ORIGINAL‘ not found. Available parameters are [
新版本的 mybatisplus-plus 会出现这个问题,当我们根据官方文档使用乐观锁的相关代码时会出现这个问题:注意 OptimisticLockerInterceptor 不要写成 Optimi ...
- 龙哥量化:什么是ZXNH直线拟合指标?ZXNH信号漂移,未来函数检测不到, 函数列表没有,大坑哦哦哦
如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 这个函数太坑, 我也不明白原理是什么, 是未来函数,信号会漂移, zxnh的值只有0和1,下面一 ...
- Qt数据库应用1-数据导入导出csv
一.前言 在经历过大大小小十几个甚至几十个纯QtWidget项目后,涉及到数据库相关的项目,几乎都有一个需求,将少量的信息数据比如设备信息.防区信息等,导出到文件保存好,然后用户可以打开该表格进行编辑 ...
- Qt开源作品13-三套样式表
一.前言 在做各种各样的项目中,难免遇到需要设定自己界面风格样式的时候,而Qt提供的qss就是牛逼的为了实现定制各种各样的皮肤的,其实一个完美的UI界面,主要由两大块组成,一个是颜色搭配,一个是布局, ...
- [转]基于 Node.js 实现前后端分离
为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了"前后端"的定义,引入前端同学都熟悉的No ...
- Pycharm IDE中导入和移除python项目
1.Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: ...