传送门

题意:给一棵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【结论】【构造】相关推荐

  1. 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty

    传送门 这些天风也温柔,题也温柔 开车啦! 文章目录 A1:Add on a Tree 题意翻译 题解 证明 代码实现 B:Count Pairs 题意翻译 题解 代码实现 C:Array Beaut ...

  2. 2019ICPC(上海) - Spanning Tree Removal(构造)

    题目链接:点击查看 题目大意:给出一个 nnn 个点的无向完全图,每次操作可以删掉包含 nnn 个点的一棵生成树中的所有边,问最多可以删几次 题目分析:典中典之欧拉通路构造题,构造方式如下: 在选定某 ...

  3. codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)

    ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...

  4. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  5. 2018.09.22 atcoder Integers on a Tree(构造)

    传送门 先考虑什么时候不合法. 第一是考虑任意两个特殊点的权值的奇偶性是否满足条件. 第二是考虑每个点的取值范围是否合法. 如果上述条件都满足的话就可以随便构造出一组解. 代码: #include&l ...

  6. C#结合Jquery LigerUI Tree插件构造树

    Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...

  7. 【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 ...

  8. Codeforces 1246D/1225F Tree Factory (构造)

    题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...

  9. HDU - 5573 Binary Tree(思维+构造+二进制)

    题目链接:点击查看 题目大意:给出一棵无限大的完全二叉树,每次给出一个 n 和一个 k ,要求从点 1 出发一直向下,找到一条长度为 k 的路径,对于路径上的点可以加上其编号,也可以减去其编号,需要构 ...

最新文章

  1. 打印Java数组的最简单方法是什么?
  2. 英特尔CPU控制机制存在隐秘开关 可被黑客利用成为后门
  3. HDU 4879 ZCC loves march (并查集,set,map)
  4. python输出举例_python字符串格式化输出及相关操作代码举例
  5. 为什么越来越多的人都拒绝办信用卡?
  6. python解压打开文件过多_让Python在后台自动解压各种压缩文件!
  7. iPhone降价后销量惊人 库克本周将再度访华
  8. [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
  9. nginx做代理上网
  10. Keras中的时间分布层TimeDistributed Layer使用教程
  11. QT QComBox详细用法 自定义QComboBox控件
  12. matlab图像质量评价程序,图像质量评价指标之Matlab实现
  13. LeetCode contest 182 5369. 统计作战单位数
  14. 吉几三的俺ら东京さ行ぐだ歌词
  15. linux串口无线透传,一种无线串口透传系统的制作方法
  16. React Native 启动流程 源码剖析
  17. Day1 Java读取二进制文件
  18. 【WIN10】此用户无法登录,因为该账户当前已被禁用
  19. 西门子PLC200连接电脑出现“未找到指定的访问点”
  20. 高蛋白饮食≠健康 多组学分析揭示植物高蛋白对血糖和肝脏脂质代谢的影响

热门文章

  1. 它是世界上最轻的固体!1000℃下不会熔化,上过火星,还能进你家......
  2. 如何优雅地向导师/老板表示:“上周工作没什么进展”?
  3. 世界上没有后悔药,时间匆匆,从关注它们开始......
  4. 好好珍惜今生,不要期待来世……
  5. 不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?
  6. Spark的基本架构
  7. matlab井深测量,一种井深测量系统及方法与流程
  8. 一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList
  9. 晨风机器人突破限制_厉害了!工程建设领域首创!会自动测量、自动调平的测量机器人...
  10. java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法