一道树型dp,方程在程序里有,注意循环的顺序和初始化。 #include<iostream>#include<cstdio>#include<cstring>using namespace std;long long dp[35][35],n,w[35],c[35][35];void find(lo
分类:
其他好文 时间:
2016-02-10 22:11:12
阅读次数:
221
题目大概是说给一棵树的n个结点从1到n编号,要求每个结点的编号大于其父结点,问有多少种编号方式。想了挺久的,感觉有点眉目,最后画了下样例YY出解法:首先求出以每个结点为根的子树大小,记为size[u],这个DFS一遍就可以求出来;接下来,dp[u]表示给以u为根的子树size[u]个编号有几种编号方...
分类:
其他好文 时间:
2016-01-22 21:46:18
阅读次数:
356
基本树型dp。dp[i][j]中i表示某人,j表示该人来了没来。转移方程见程序。注意预处理:先初始化所有dp[i][1]为给定的权值。先将没有下属的人进队。#include#include#include#includeusing namespace std;int n,r[6005],fath[6...
分类:
其他好文 时间:
2016-01-06 20:21:32
阅读次数:
152
tarjan缩点后即为根,然后就是简单的树型DP然而DP花了我好长时间QAQ得找个时间练DP才行 1 #include 2 #define inc(i,l,r) for(int i=l;i=r;i--) 4 #define link(x) for(edge *j=h[x];j;j=j->next) ...
分类:
其他好文 时间:
2016-01-04 22:34:15
阅读次数:
253
单整点集V是无向无环图,可以看作树。dp[u]表示,选取u点时u点和它子树最大的权和。而某个点不选,那么它和它子树的最大权和是0,因为题目求的集合要连通。状态转移方程是:dp[u]=∑max(0,dp[son(u)])。 1 #include 2 #include 3 #include 4 #inc...
分类:
其他好文 时间:
2016-01-01 22:52:52
阅读次数:
194
树型DP第一题。。。就是从boss到底层员工是一个树型结构,底层员工想加薪,如果每个boss都有超过T%的员工要求加薪,他就会往更高的bOSs传达,问如果让根节点的大boss接到加薪要求,最少要有多少名员工提出加薪要求。d[u]表示u如果提出加薪,所需要的员工数,很明显,最底层的员工肯定都要求加薪,...
分类:
其他好文 时间:
2015-09-02 13:41:20
阅读次数:
164
2286: [Sdoi2011]消耗战Time Limit:20 SecMemory Limit:512 MBSubmit:1040Solved:363[Submit][Status][Discuss]Description在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条...
分类:
其他好文 时间:
2015-08-09 22:22:38
阅读次数:
230
3572: [Hnoi2014]世界树Time Limit:20 SecMemory Limit:512 MBSubmit:555Solved:319[Submit][Status][Discuss]Description世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界。在这里,生存着各种各样的...
分类:
其他好文 时间:
2015-08-09 13:53:26
阅读次数:
397
#include
#include
#include
#include
using namespace std;
int n,m;
int vis[105];
int dp[105][105];
vector vec[105];
vector G[105];
int c[105];
int p[105];
void dfs(int x){
vis[x] = 1;
int si = G...
分类:
其他好文 时间:
2015-07-21 10:46:54
阅读次数:
112
题意:给一棵树的边标上0或1,求以节点i为源点,其它点到i的唯一路径上的1的边数不超过1条的方案数,输出所有i的答案。思路:令f[i]表示以节点i为源点,只考虑子树i时的方案数,ans[i]为最后答案,fa[i]为i的父亲,则不难得出以下转移方程:f[i] =∏(1 + f[v]),v是i的儿子 ....
分类:
其他好文 时间:
2015-05-27 22:28:42
阅读次数:
193