题目大意:有N座城市,要求在这N座城市中建一个消防系统,使得每座城市城市着火时都能被按时扑灭
现在给出每座城市建一个消防站所需的花费w和每座城市相邻消防站的最远距离lim(和该城市距离超过lim的城市的消防站无法救该城市的火),问要使所有的城市都能被救到火,建消防站的最小花费是多少解题思路:参考了别人的题解,果然还是太弱了。。。
要使该城市能被救到火,那么消防站不是建在该点,就是建在以该点为根的...
分类:
其他好文 时间:
2015-05-16 14:52:57
阅读次数:
184
题目大意:给出一棵树,每条边都有一个权值,要求求出从每个点出发的最大权值和解题思路:无根树先转化成有根树,以1为根
先dfs一次,求出以某个点为根,通过子节点所能到得到的最大权值和,和次大权值和,并纪录求得最大权值和的那个子节点
这样我们只考虑了通过子节点得到最大权值和的情况,但要求最大权值和,当然还要判断通过父节点得到最大权值和是否会大于通过子节点得到最大权值和,怎么判断呢?
设dp[i]为...
分类:
其他好文 时间:
2015-05-15 15:41:04
阅读次数:
134
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 100000000
using namespace std;
int n;
vector ma[1515];
int dp[1510];
int fun(int x){
...
分类:
其他好文 时间:
2015-04-29 19:55:05
阅读次数:
139
大致思路和大白书上的相同,不过感觉书上的决策部分讲解的并不是非常清楚,因此我在这里讲解一下我的决策思路。
首先,d(i,j)表示根节点为i的子树,当它的父节点为j(j=0或1)时的x的最小值(x的含义书上有讲解),要将该子树根节点和父节点相连的边的情况计算在内。接下来遍历森林中的每一棵树,对于每一棵树的根节点进行特别的处理,然后就对该树进行深度优先搜索dfs(i)。
...
分类:
其他好文 时间:
2015-04-07 21:37:44
阅读次数:
160
解题思路:
将一棵树变成一个环,如果一个结点的分叉数目大于等于2,则将它与父节点断开,并且断开子结点数目sum - 2条边,并再次连接sum-2个儿子形成一条直链然后这条游离链与另一条游离链相连,共需要2*(sum-1)个操作,如果该结点为根结点,则一共需要2 * (sum - 2)种操作。
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2015-03-19 10:14:34
阅读次数:
125
树的重心,EASY题。树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有重要的作用,可以避免N^2的极端复杂度(从退化链的一端出发),保证NlogN的复杂度,利用树型dp可以很好地求树的重心...
分类:
其他好文 时间:
2015-03-11 22:59:37
阅读次数:
133
二叉查找树【题目描述】已知一棵特殊的二叉查找树。根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小。另一方面,这棵查找树中每个结点都有一个权值,每个结点的权值都比它的儿子结点...
分类:
其他好文 时间:
2015-02-10 13:14:23
阅读次数:
716
首先存这些字符,用trie来存,通过trie就很容易联想到树型DP,这里的DP就不是取最优值之类的了,而是用来弄到达某个节点的胜负情况。
我们首先设节点v,win[v]代表已经组装好的字符刚好匹配到v了,然后需要进行下一步匹配时,先手是否可以赢,lose[v]则代表先手是否会输。
叶节点,win[v] = false, lose[v] = true.
其他节点 win[v] = win[v] | !win[child], lose[v] = lose[v] | !lose[child]. (因为每次赢的...
分类:
其他好文 时间:
2014-10-23 22:42:57
阅读次数:
191
#include
#include
#include
using namespace std;
#define SIZE 230
#define BACK 1
#define AWAY 0
int DP[SIZE][SIZE][2];
bool visits[SIZE];
int vals[SIZE];
deque tree[SIZE];
int num, steps;
void ...
分类:
移动开发 时间:
2014-10-05 15:08:08
阅读次数:
176
题目地址:http://codeforces.com/contest/461/problem/B
题目大意:给一棵树,每个点为白色或黑色,切断一些边,使得每个连通块有且仅有一个黑点,问划分方案数。
算法讨论:TreeDP。f[x][0..1]表示x所在连通块有0/1个黑点。设y为x的儿子,则DP方程为f[x][1]=f[x][1]*f[y][0]+f[x][1]*f[y][1]+f[x][0]...
分类:
移动开发 时间:
2014-08-27 09:25:57
阅读次数:
287