BZOJ 1063 道路设计(树形DP)】的更多相关文章

题目描述的实际是一颗二叉树,对于每个结点,要么满叉,要么无叉. 对于一种无解的简单情况,我们搜一遍树找到最浅的叶子结点1和最深的叶子结点2,如果dep[1]<dep[2]-1,则显然无解. 所以现在所有的叶子结点的深度要么是dep[1]和dep[2]. 我们可以把所有结点用node[x]标记状态. node[x]=0表示x的子树下所有叶子结点深度都是dep[2]. node[x]=1表示x的子树下一部分叶子结点深度是dep[1],一部分是dep[2]. node[x]=2表示x的子树下所有叶子结…
题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小.N<=10000 题解 我们可以猜一个结论,用到的编号不会超过某一个值 我们发现我们可以开到100以上都不会超时 所以我们把编号最多100算,跑树形dp即可 其实可以证明编号不会超过logn... Code #include <cstdio> #include <cstring> #include <algor…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1063 题意:给出一个无环图( 也就是树,但是也有可能是森林),代表一个国家的城市.1是首都.每条边是一条公路.现在要在这些公路中选出一些修改成铁路.要求每个城市至多在一条铁路上.修改完后,每个城市到首都可能是铁路公路交叉着走.现在定义一个城市的“不便利度”为到达首都要走的公路的次数.定义国家的不便利度为所有城市不便利度的最大值.问国家的不便利度最小为多少?有多少种修改方案使得可以得到此…
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农民可以从它自己的钱中, 取出任意数量的钱, 交给某个相邻村子的农民. 对于每个农民给定一个值 v_i, 求    (1) 最少需要多少次操作, 使得每个农民最终拿到的钱 >= 给定的值. Input 第1行: 一个整数 N (1 <= N <= 2000)    第2行: 一个整数 X (0…
http://www.lydsy.com/JudgeOnline/problem.php?id=1063 题意:给你一棵树,也有可能是不连通的,把树分成几个链,求每个点到根经过的最大链数最小,而且要输出方案数. 思路:考虑dp,f[i][j]代表第i个节点,最大链数是j,那么有 f[i][j][0]代表已经向子树连接了0个链 f[i][j][1]代表已经向子树连接了1个链 f[i][j][2]代表已经向子树连接了2个链 这样转移就是 f1=f[pur][b][0]+f[pur][b][1] f2…
题目传送门: BZOJ 题意精简版:给出一棵树,在一种方案中可以将树的若干链上的所有边的边权改为$0$,但需要保证任意两条链之间没有交点.问最少的一种方案,使得从根节点到其他节点经过的边的边权和的最大值最小,并求出方案数.$N \leq 10^5$ 真心火题,现在我还在想是哪个神人推出的这个DP方程 关于原题中的无解情况直接判断$M==N-1$是否成立即可,因为根据题目要求,最后生成出来的一定会是一棵树. 先考虑第二问,设$f_{i,j,k}$表示在子树$i$内,最大的边权和不超过$j$,点$i…
省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z国的每个城市所处的经度都不相同,并且最多只和一个位于它东边的城市直接通过公路相连.Z国的首都是Z国政治经济文化旅游的中心,每天都有成千上万的人从Z国的其他城市涌向首都.为了使Z国的交通更加便利顺畅,小Z决定在Z国的公路系统中确定若干条规划路线,将其中的公路全部改建为铁路.我们定义每条规划路线为一个长…
思路:随便想想就能想出来啦把...  卡了我一个vector... #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define piii pair<int, pair<int,int> > using namespace std; ; + ; cons…
时间限制:12000ms 单点时限:1000ms 内存限制:256MB 描述 编织者是 Dota 系列中的一个伪核,拥有很强的生存能力和线上消耗能力.编织者的代表性技能是缩地.缩地带来的隐身.极限移动速度和伤害让它拥有很高的机动性以及赖线和收割的能力. 假设当前作战区域是一棵有根树,编织者所在的位置为根节点1,树中每个节点,有一个权值vi,代表这个节点的收益.树中的每条边,有一个权值wi,代表每条边的长度.编织者从根结点出发,最远累计移动d 距离时,所能得到的收益的最大值是多少?注意重复经过一个…
题意 给一颗树,删除一条边再加一条边,使它仍为一颗树且任意两点间的距离的最大值最小. 题目数据范围描述有问题,n为1或重建不能使任意两点距离最大值变小,可以输出任意答案. 分析 删除一条边后会使它变成两颗树,两棵树的直径的中点相连一定是使距离最小的 红色的边为删除重建的边 在树上dp维护每个子树的最大直径\(h[x]\),和去除这个子树后的树的最大直径\(t[x]\),u为x的父亲,删除u-x这条边并重建后的树的最大直径为 \[\max\{\frac{h[x]+1}{2}+\frac{t[x]+…