传送门

文章目录

  • 题意:
  • 思路:

题意:

给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权cic_ici​。

n≤1e5,n−1≤m≤1e5,−n≤ci≤nn\le1e5,n-1\le m\le 1e5,-n\le c_i\le nn≤1e5,n−1≤m≤1e5,−n≤ci​≤n

思路:

考虑这个图是一棵树的时候,那么我们从叶子开始向上递推一定能推出来每条边的唯一解,检查一下根节点是否合法即可。

考虑一般图的情况,我们还是先dfsdfsdfs找出来一棵树,让后如果此时根节点已经合法,那么显然将其他非树边都置为000即可。如果不合法,我们考虑如何操作能使其合法。

想想还有什么条件没有用到,他是个图,我们只拿出来了一棵树,不合法的时候只能通过环来平衡一下。考虑两个点u,vu,vu,v,他们之间有一条边构成环,假设我们将这个边权值置为xxx,这两个点在原树中连向父亲的边边权为y,zy,zy,z,加上这个边构成环之后边权变成了y−x,z−xy-x,z-xy−x,z−x,继续向上递推手玩一下不难发现是正负交替的,所以我们分奇偶环来考虑。

(1)(1)(1)考虑偶环的时候,设u,vu,vu,v的lcalcalca为fff,由于其是奇环,那么两个点到fff的距离的奇偶性不同,所以他们最终的符号是相反的,也就是在fff处,两个分别是+x,−x+x,-x+x,−x,所以就抵消了,并无贡献。

(2)(2)(2)考虑奇环的时候,跟上面一样的分析方法,可以发现他们最终的状态是相同的,也是2x2x2x,再向上也是2x2x2x的变化量,所以这个是可以用来修改根节点权值的。

所以通过以上分析,根节点如果是奇数一定无解,否则就找个奇环来构造一下即可。

最后,离天下大谱之我一发过了。

// Problem: D. Weighting a Tree
// Contest: Codeforces - Codeforces Round #453 (Div. 1)
// URL: https://codeforces.com/problemset/problem/901/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m;
vector<PII>v[N];
LL c[N],ans[N];
int fa[N],depth[N],ff[N];
bool st[N],flag=false;void dfs1(int u) {st[u]=1;for(auto x:v[u]) {if(st[x.X]) continue;depth[x.X]=depth[u]+1;ff[x.X]=u;dfs1(x.X);c[u]-=c[x.X];ans[x.Y]=c[x.X];fa[x.X]=x.Y;}
}void solve(int u,int v,int id) {int op=depth[u]&1;if(!op) {ans[id]=c[1]/2;int op=-1;while(u) {ans[fa[u]]+=op*c[1]/2;u=ff[u];op*=-1;}op=-1;while(v) {ans[fa[v]]+=op*c[1]/2;v=ff[v];op*=-1;}} else {ans[id]=-c[1]/2;int op=1;while(u) {ans[fa[u]]+=op*c[1]/2;u=ff[u];op*=-1;}op=1;while(v) {ans[fa[v]]+=op*c[1]/2;v=ff[v];op*=-1;}}
}void dfs2(int u,int fa) {if(flag) return;st[u]=1;for(auto x:v[u]) {if(flag) return;if(x.X==fa) continue;if(st[x.X]) {if((depth[u]+depth[x.X])%2==0) {flag=true;solve(u,x.X,x.Y);return;}continue;}dfs2(x.X,u);}
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%lld",&c[i]);for(int i=1;i<=m;i++) {int a,b; scanf("%d%d",&a,&b);v[a].pb({b,i}); v[b].pb({a,i});}dfs1(1);if(c[1]==0) {puts("YES");for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);puts("");return 0;} else if(abs(c[1])&1) {puts("NO");return 0;}memset(st,0,sizeof(st));dfs2(1,0);if(flag) {puts("YES");for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);puts("");} else {puts("NO");}return 0;
}
/**/

Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树相关推荐

  1. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  2. Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造

    B. Invariance of Tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/ ...

  3. Codeforces Round #381 (Div. 1) A. Alyona and mex 构造

    传送门 文章目录 题意: 思路: 题意: 你需要确定一个长度为nnn的数组aaa,满足给定的mmm个[l,r][l,r][l,r]限制,需要保证构造出来的aaa数组对于每个[l,r][l,r][l,r ...

  4. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  5. Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

    传送门 文章目录 题意: 思路: 题意: 思路: 史上最水GGG题,没有之一. 考虑最小的情况如何构造,显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可,这样的最小值为n∗(n+1)2\f ...

  6. Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

    传送门 文章目录 题意: 思路 题意: 直接白嫖 思路 首先不难发现,n≤2n\le2n≤2的时候是无解的. 现在我们来构造n=3n=3n=3的情况,通过打表可以发现如下矩阵是符合题目要求的: 179 ...

  7. Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造

    传送门 文章目录 题意: 思路: 题意: 思路: 针灸思维不行,数据结构来凑呗. 一开始做的时候想简单了,一直wawawa,后来想到了hackhackhack样例,开始换思路构造,结果死活想不到O(m ...

  8. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

  9. Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)

    题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和X ...

最新文章

  1. 插入法排序c语言程序,插入排序算法及C语言实现
  2. java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!
  3. 早起21天,奖你 1000元!
  4. 最快15分钟,完成高精度AI模型定制开发
  5. OpenSUSE11实现pam_mysql对FTP认证管理
  6. Elasticsearch合并高亮字段
  7. Composer最近升级后导致无法下载包的问题解决办法
  8. 农田生产潜力数据集、耕地分布矢量数据、土地利用数据、作物分布数据、林地分布数据、绿地分布
  9. OpenCV配置教程
  10. office插件开发_Excel插件——方方格子
  11. soap响应报文拼装_soap报文解析
  12. python操作redis集群是连接池么_Python如何操作redis使用连接池
  13. 关于Kali使用aireplay-ng时出现设备繁忙的解决(转自 zpblog.cn)
  14. 淘宝天猫自动领取喵币
  15. https://wenku.baidu.com/view/35c88b375acfa1c7aa00ccca.html--swot
  16. 苹果cms v8模板仿q2002电影网站电脑手机自适应模板
  17. php开发俄罗斯方块,HTML5+JS实现俄罗斯方块原理及具体步骤_html5教程技巧
  18. 搭建Janus的HTTPS环境
  19. Wampserver部署thinksns
  20. 传统手工特征方法整理--LBP,HAAR,SIFT,HOG,ORB,SURF

热门文章

  1. 服务器的响应一直一直发送不过去,zeroRPC:在发送响应后继续运行进程
  2. 郑州升达经贸管理学院计算机科学与技术,郑州升达经贸管理学院计算机科学与技术专业2016年在福建理科高考录取最低分数线...
  3. halcon ocr 生成样本变体_Halcon简单文字识别OCR的使用
  4. 地球上最快的速度......
  5. 难以摸透的直男脑回路......
  6. 足不出户,游遍七大洲,不可错过的14部地理纪录片!
  7. 大数据告诉你:学历真的能改变命运!!
  8. 真正拉开人与人之间的差距是什么?
  9. 数据可视化,带给你的惊艳并不止这一点!
  10. java 手机 上传图片_在手机端使用拍照功能上传图片的功能的解决文案