【CF1189D】Add on a Tree【结论】【构造】
传送门
题意:给一棵NNN个结点的树,构造或判断无法构造若干次操作,每次操作选择两个叶节点将路径上的边加上一定整数权值,使得每条边等于给定权值。权值互不相同且为偶数。
1≤N≤10001 \leq N \leq10001≤N≤1000
结论:能够构造操作,当且仅当没有度数为2的点。
如果有一个度数为2的点,那么这两条边的权值一定相等。而题目中的权值互不相同,所以无法构造。
考虑构造add(u,v,w)add(u,v,w)add(u,v,w)在uuu到vvv的路径上加上www 其中vvv是叶节点
如果uuu是叶节点,直接加上
如果不是,以uuu为根找出两个叶节点l1,l2l_1,l_2l1,l2,u,l1,l2u,l_1,l_2u,l1,l2所在子树互不相同。
然后u,l1u,l_1u,l1加上x/2x/2x/2,u,l2u,l_2u,l2加上x/2x/2x/2,l1,l2l_1,l_2l1,l2减去x/2x/2x/2
然后整棵树搜一遍,瞎搞一通
略精神污染
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
#define MAXN 1005
#define MAXM 2005
using namespace std;
int deg[MAXN];
struct edge{int u,v,w;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v,int w)
{e[++cnt]=(edge){u,v,w};nxt[cnt]=head[u];head[u]=cnt;
}
int x[MAXN*MAXN],y[MAXN*MAXN],v[MAXN*MAXN],m;
int b[MAXN];
void dfs(int rt,int u,int f)
{if (deg[u]==1) return (void)(b[u]=rt);b[u]=0;for (int i=head[u];i;i=nxt[i])if (e[i].v!=f)dfs(rt,e[i].v,u);
}
void addedge(int a,int b,int c)
{++m;x[m]=a;y[m]=b;v[m]=c;
}
int n;
void addpath(int u,int l,int x)
{if (u==l) return;if (deg[u]==1) return addedge(u,l,x);b[u]=0;for (int i=head[u];i;i=nxt[i])dfs(e[i].v,e[i].v,u);int l1=0,l2=0;for (int i=1;i<=n;i++)if (deg[i]==1&&b[i]!=b[l]&&!l2){if (!l1) l1=i;elseif(b[i]!=b[l1])l2=i;}addedge(l,l1,x/2);addedge(l,l2,x/2);addedge(l1,l2,-x/2);
}
int lv[MAXN];
void DFS(int u,int f)
{if (deg[u]==1&&f) return (void)(lv[u]=u);for (int i=head[u];i;i=nxt[i])if (e[i].v!=f){DFS(e[i].v,u);lv[u]=lv[e[i].v];addpath(u,lv[u],e[i].w);addpath(e[i].v,lv[e[i].v],-e[i].w);}
}
int main()
{scanf("%d",&n);for (int i=1;i<n;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);++deg[u];++deg[v];addnode(u,v,w);addnode(v,u,w);}for (int i=1;i<=n;i++)if (deg[i]==2){puts("NO");return 0;}puts("YES");DFS(1,0);printf("%d\n",m);for (int i=1;i<=m;i++)printf("%d %d %d\n",x[i],y[i],v[i]);return 0;
}
【CF1189D】Add on a Tree【结论】【构造】相关推荐
- 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty
传送门 这些天风也温柔,题也温柔 开车啦! 文章目录 A1:Add on a Tree 题意翻译 题解 证明 代码实现 B:Count Pairs 题意翻译 题解 代码实现 C:Array Beaut ...
- 2019ICPC(上海) - Spanning Tree Removal(构造)
题目链接:点击查看 题目大意:给出一个 nnn 个点的无向完全图,每次操作可以删掉包含 nnn 个点的一棵生成树中的所有边,问最多可以删几次 题目分析:典中典之欧拉通路构造题,构造方式如下: 在选定某 ...
- codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)
ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...
- Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造
传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...
- 2018.09.22 atcoder Integers on a Tree(构造)
传送门 先考虑什么时候不合法. 第一是考虑任意两个特殊点的权值的奇偶性是否满足条件. 第二是考虑每个点的取值范围是否合法. 如果上述条件都满足的话就可以随便构造出一组解. 代码: #include&l ...
- C#结合Jquery LigerUI Tree插件构造树
Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...
- 【VK Cup 2016 - Round 1 (Div 2 Edition)C】【构造】Bear and Forgotten Tree 3 构造一棵树直径为d且点1的深度为h
Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- Codeforces 1246D/1225F Tree Factory (构造)
题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...
- HDU - 5573 Binary Tree(思维+构造+二进制)
题目链接:点击查看 题目大意:给出一棵无限大的完全二叉树,每次给出一个 n 和一个 k ,要求从点 1 出发一直向下,找到一条长度为 k 的路径,对于路径上的点可以加上其编号,也可以减去其编号,需要构 ...
最新文章
- 打印Java数组的最简单方法是什么?
- 英特尔CPU控制机制存在隐秘开关 可被黑客利用成为后门
- HDU 4879 ZCC loves march (并查集,set,map)
- python输出举例_python字符串格式化输出及相关操作代码举例
- 为什么越来越多的人都拒绝办信用卡?
- python解压打开文件过多_让Python在后台自动解压各种压缩文件!
- iPhone降价后销量惊人 库克本周将再度访华
- [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
- nginx做代理上网
- Keras中的时间分布层TimeDistributed Layer使用教程
- QT QComBox详细用法 自定义QComboBox控件
- matlab图像质量评价程序,图像质量评价指标之Matlab实现
- LeetCode contest 182 5369. 统计作战单位数
- 吉几三的俺ら东京さ行ぐだ歌词
- linux串口无线透传,一种无线串口透传系统的制作方法
- React Native 启动流程 源码剖析
- Day1 Java读取二进制文件
- 【WIN10】此用户无法登录,因为该账户当前已被禁用
- 西门子PLC200连接电脑出现“未找到指定的访问点”
- 高蛋白饮食≠健康 多组学分析揭示植物高蛋白对血糖和肝脏脂质代谢的影响
热门文章
- 它是世界上最轻的固体!1000℃下不会熔化,上过火星,还能进你家......
- 如何优雅地向导师/老板表示:“上周工作没什么进展”?
- 世界上没有后悔药,时间匆匆,从关注它们开始......
- 好好珍惜今生,不要期待来世……
- 不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?
- Spark的基本架构
- matlab井深测量,一种井深测量系统及方法与流程
- 一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList
- 晨风机器人突破限制_厉害了!工程建设领域首创!会自动测量、自动调平的测量机器人...
- java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法