CF 633 div1 1338 B. Edge Weight Assignment 构造
这场当时没打 看到这个B题吓到我了 还好当时没打。
想了20min才知道怎么做 而且还不能证明.
首先考虑求最小。
可以发现 如果任意两个叶子节点之间的距离都是偶数 那么显然 答案为1.
可以发现 如果有两个叶子之间的距离为奇数 那么答案至少为3.
考虑画多张图 可以发现不管怎么做 答案最多为3.
尝试证明:对于两个点之间的距离是奇数时 每三段我们认为是0 最后一定剩下两端 填一样的数字即可。
可以发现这样构造可行。(画图证明法更好一点.
考虑求最大。
容易猜想是不是树的直径 然后被样例3打脸.
可以发现如果有连个叶子节点之间的距离为2,那么 这两条边必然相同。
考虑是否还存在这样的情况 可以发现不存在了。
接着对着直径先构造一波 考虑除掉上述情况的其他链 可以发现 可以 使用不同的颜色染且最后还是正确的。
猜想 除掉上述情况 剩下的所有边都有代价1.
经过不断的画图+构造 可以发现这是正确的。
想出来这两个结论的时候 我也觉得挺不可思议的 但是这确实是正确的 可以构造出来。
const int MAXN=100010;
int n,len,flag;
int f[MAXN][2],ru[MAXN];
int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
inline void add(int x,int y)
{
ver[++len]=y;
nex[len]=lin[x];
lin[x]=len;
}
inline void dfs(int x,int fa)
{
f[x][0]=f[x][1]=-1;
if(ru[x]==1)f[x][0]=1;
go(x)
{
if(tn==fa)continue;
dfs(tn,x);
if(f[tn][0]!=-1&&f[x][0]!=-1)flag=1;
if(f[tn][1]!=-1&&f[x][1]!=-1)flag=1;
if(f[tn][0]!=-1)f[x][1]=1;
if(f[tn][1]!=-1)f[x][0]=1;
}
}
int main()
{
//freopen("1.in","r",stdin);
get(n);
rep(2,n,i)
{
int get(x);int get(y);
add(x,y);add(y,x);
++ru[x];++ru[y];
}
dfs(1,0);
if(flag)printf("%d ",3);
else printf("%d ",1);
int cnt=n-1;
rep(1,n,j)
{
int w=0;
go(j)if(ru[tn]==1)++w;
if(w)cnt=cnt-w+1;
}
printf("%d\n",cnt);
return 0;
}
CF 633 div1 1338 B. Edge Weight Assignment 构造的更多相关文章
- CF#633 D. Edge Weight Assignment
D. Edge Weight Assignment 题意 给出一个n个节点的树,现在要为边赋权值,使得任意两个叶子节点之间的路径权值异或和为0,问最多,最少有多少个不同的权值. 题解 最大值: 两个叶 ...
- Edge Weight Assignment(树-异或-贪心)
大意: 给定一棵无根树,要求你任意设置n-1条边的边权. 使得任意叶子节点间边权的XOR值为0: 此时,令f为所有边权数值不同的个数,求最小的f和最大的f. \(\color{Red}{------- ...
- CF 633 F. The Chocolate Spree 树形dp
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<ve ...
- CF#462 div1 D:A Creative Cutout
CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...
- 【CodeForces】827 D. Best Edge Weight 最小生成树+倍增LCA+并查集
[题目]D. Best Edge Weight [题意]给定n个点m条边的带边权无向连通图,对每条边求最大边权,满足其他边权不变的前提下图的任意最小生成树都经过它.n,m<=2*10^5,1&l ...
- CF#345 (Div1)
论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...
- Codeforces827D. Best Edge Weight
$n \leq 2e5,m \leq 2e5$的有边权图,对每条边问:不改其他边的情况下这条边最多能是多少使得他一定在所有最小生成树上,如果无穷大输出-1. 典型题+耗时题,CF上的绝望时刻..打VP ...
- Codeforces 828F Best Edge Weight - 随机堆 - 树差分 - Kruskal - 倍增算法
You are given a connected weighted graph with n vertices and m edges. The graph doesn't contain loop ...
- CF #356 div1 A. Bear and Prime 100
题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...
随机推荐
- Spark TempView和GlobalTempView的区别
Spark TempView和GlobalTempView的区别 TempView和GlobalTempView在spark的Dataframe中经常使用,两者的区别和应用场景有什么不同. 我们以下面 ...
- Howdoo欢迎Mitel成为内容发布支持者
原文链接:https://medium.com/howdoo/howdoo-welcomes-mitel-as-a-launch-supporter-4c40027d4dd1 “Mitel很高兴能够成 ...
- HashMap等集合初始化时应制定初始化大小
阿里巴巴开发规范中,推荐用户在初始化HashMap时,应指定集合初始值大小. 一.原因 这个不用多想,肯定是效率问题,那为什么会造成效率问题呢? 当我们new一个HashMap没有对其容量进行初始化的 ...
- flutter gradle版本不一致
我们有时候拿到别人的项目时,直接运行可能会报错,因为gradle版本不一样,此时需要修改这两个地方: 要把这两个版本改成你本地的版本就可以了,怎么看呢,一般你自己创建过flutter项目,里面也有这个 ...
- DVWA学习记录 PartⅣ
File Inclusion 1. 题目 File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include ...
- MISC学习记录 (一)
A记录 题目 他在看什么视频,好像很好看,不知道是什么网站的. 还好我截取了他的数据包,找呀找. key就是网站名称.格式ctf{key} tip:A记录的第一条. 解题链接 过程 下载解题链接中的文 ...
- 读《大话设计模式》——应用工厂模式的"商场收银系统"(WinForm)
要做的是一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费.两个文本框,输入单价和数量,再用个列表框来记录商品的合计,最终用一个按钮来算出总额就可以了,还需要一个重置按钮来重新开始. 核心 ...
- java 数据结构(十一):Map接口
双列集合框架:Map1.常用实现类结构 |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) * |----HashMap:作为Map的主要实现类:线程 ...
- python 并发专题(十三):asyncio (二) 协程中的多任务
. 本文目录# 协程中的并发 协程中的嵌套 协程中的状态 gather与wait . 协程中的并发# 协程的并发,和线程一样.举个例子来说,就好像 一个人同时吃三个馒头,咬了第一个馒头一口,就得等这口 ...
- unity-Timeline实践
前言 建议入门方式(基本的手册知识了解之后):官方Demo TimelineInputDemo 自定义轨迹 CustomTrack Signal 标记 创建Emitter 和 Receiver 引用: ...