摘要:
题意:一个人要买通若干支持者,这些支持者的关系形成一棵森林,只要买通树根他的孩子节点也会被买通,问你至少要买通m个守卫要花多少钱。思路:由于是一颗森林我们需要加一个结点使得他到每个点都建一条边,然后dp[i][j]表示i为根的结点买通j个需要的最小花费。dp[v][j] = min(dp[v][j]... 阅读全文
摘要:
题意:带权树上有起点终点每个点上有宝藏,一个人只有T分钟要从起点到重点,问你最多能收集多少宝藏。思路:树形dp,首先判断能不能走到终点,然后把路径上的边权变为0时间减去所有边权。dp[v][j]表示从v出发回到v话费j分钟最多能收集到的宝藏。dp[v][j] = max(dp[v][j], dp[x... 阅读全文
摘要:
题意:一棵树上问你最少切掉几条边使得能分割出一个结点数正好为k的子树。思路:dp[i][j]表示以i为根切掉j个结点最少要几条边。dp[v][j] = min(dp[v][j], dp[v][j-k] + dp[x][k]);代码如下: 1 dp[v]... 阅读全文
摘要:
题意:有一个有线电视网络叶子结点是用户,每个用户有一个愿意支付的金额。然后每条边都有话费。问公司在不亏本的情况下最多能满足多少用户。思路:dp[v][j] = max(dp[v][j], dp[v][j-k]+dp[x][k]-edge(v, x))其实就是背包问题,但是一开始TLE了一次,这里要有... 阅读全文
摘要:
Mark。看着吴神博客写的,还未完全懂。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #includ... 阅读全文
摘要:
题意:一颗树,n个节点,现在要在节点处设置尽量少的哨兵,使得每条边都被观察到。思路:dp[v][1] 表示v为根的子树v放哨兵的最小花费。dp[v][0]表示v为根的子树v不放哨兵的最小花费。代码如下: 1 #include 2 #include 3 #include 4 #include ... 阅读全文
摘要:
题意:输出从一颗树中所有结点出发可以走的最长的路。思路:先找到树上最长链然后判断两个端点中到每个结点远的距离就是答案。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8... 阅读全文
摘要:
两道差不多的题目,放在一起了poj 2342:题意:在一个公司中要举办一个聚会,每一个员工有一个奉献值。为了和谐规定直接上下级不能一起出席。让你找出奉献值之和最大为多少。思路:dp[v][1]表示当前结点选,能获得的最大奉献值,dp[v][0]表示当前节点不选能获得的最大奉献值。状态转移:dp[v]... 阅读全文
摘要:
思路:用邻接矩阵存储图,然后矩阵的k次方即为答案。只需要修改矩阵乘法c[i][j] = min(c[i][j], a[i][k] + b[k][j])即可。并不难写关键是思路。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #inclu... 阅读全文
摘要:
Problem A Football题意:给n个球队,每个球队之间只能有一场比赛。要求构造一个每个球队只胜k场。思路:直接暴力,标记一下就可以了。代码如下: 1 /************************************************** 2 * Author :... 阅读全文
摘要:
Problem A Guess a number!这道题比较容易错注意最小值一定小于-1e9,最大值大于1e9代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Bl... 阅读全文
摘要:
思路:一道裸的字典树题。先存代码以后备用。代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-04-07 13:10 5 * Filename : testTrie.cpp 6 * Description : 7 * ***************************************... 阅读全文
摘要:
题意:开始有一个细胞每秒制造一个抗生素。每个细胞需要k个抗生素用d的时间感染。为你多少时间能把所有的细胞都感染。思路:贪心。需要时间长的细胞先感染。代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-04-06 12:54 5 * Filename : fuzhou_ol2.cpp 6 * Descript... 阅读全文
摘要:
题意:在一棵带权树上要切断若干条边使得根节点与所有叶子结点都不联通,且花费不能超过m。问你切掉边中最大的权值最小的是多少。思路:二分最大权值,验证答案。每次选择当前结点下面一条边或者是当前子树多有叶子结点不连通的最小值。叶子结点的只为INF(这里被坑了无数次!!!最大值不能太大每次累加起来就越界了,我错了10次有木有)。代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/... 阅读全文
摘要:
题意:从一颗树的根出发走k步最多能摘到的苹果。思路:树形dp 参考了吴神的博客讲的很清楚了http://www.cnblogs.com/wuyiqi/archive/2012/01/09/2316758.html 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-04-03 20:09 5 * Filename : p... 阅读全文