z最近在学习树形DP...好难啊。

在cf上找到了一题c题当模版马克一下。

题目不贴了。。>>http://codeforces.com/problemset/problem/855/C<<

题目的意思就是给你一棵有n个节点的树,m个关系,每个节点需要上色,一共有K种颜色,其中有一个最大色,与他相邻的节点只能上比他“小”的颜色。并且最多有X个节点可以染最大色。求问染色方法有多少种。

代码如下:

#include<vector>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
const int mod=1e9+;
int n,m,K,X;
vector<int> e[];//用来存储树枝(双向)
long long dp[][][];//dp主体,分别表示节点、选择最大色的节点数,最后一个空的0,1,2分别表示“选比最大色小的颜色时”
//“选最大色时”、“选比最大色大的颜色时” int sz[100010]={0};//表示递归到该节点时已选最大色的数目
int t[12][3];

int sz[100010]={0};
int t[12][3];
long long dfs(int x,int pre)
{
dp[x][0][0]=K-1;
dp[x][1][1]=1;
dp[x][0][2]=m-K;
sz[x]=1;
int i,xx,j,k;
for(i=0;i<e[x].size();i++)
{
xx=e[x][i];
if(xx==pre) continue;
dfs(xx,x);
memset(t,0,sizeof(t));
for(j=0;j<=sz[x];j++)
for(k=0;k<=sz[xx];k++)
{
if(j+k>X) continue;
t[j+k][0]=(t[j+k][0]+(dp[x][j][0]*(dp[xx][k][0]+dp[xx][k][1]+dp[xx][k][2]))%mod)%mod;
t[j+k][1]=(t[j+k][1]+(dp[x][j][1]*dp[xx][k][0]%mod))%mod;
t[k+j][2]=(t[k+j][2]+(dp[x][j][2]*(dp[xx][k][0]+dp[xx][k][2])%mod))%mod;
}
sz[x]=min(sz[x]+sz[xx],X);
for(j=0;j<=sz[x];j++)
for(k=0;k<=2;k++)
{
dp[x][j][k]=t[j][k];
}
}
}
int main()
{
int i,j,k,q,w;
while(cin>>n>>m)
{
long long ans=0;
for(i=1;i<=n;i++) e[i].clear();
for(i=1;i<n;i++)
{
cin>>q>>w;
e[q].push_back(w);
e[w].push_back(q);
}
cin>>K>>X;
dfs(1,-1);
for(j=0;j<=sz[1];j++)
for(k=0;k<=2;k++)
ans=(ans+dp[1][j][k])%mod;
cout<<ans<<endl;
}
}

 

 

Codeforces 855C. Helga Hufflepuff's Cup----树形DP的更多相关文章

  1. Codeforces 855C - Helga Hufflepuff's Cup

    855C - Helga Hufflepuff's Cup 题意 要求构建一棵树,树上至多可以存在 \(x\) 个权值为 \(k\) 的重要点,且与重要点连边的点的权值必须小于 \(k\),问有多少种 ...

  2. C. Helga Hufflepuff's Cup 树形dp 难

    C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来. dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i ...

  3. 855C Helga Hufflepuff's Cup

    传送门 题目大意 给你一棵树,可以染m种颜色,现定义一种特殊的颜色K,一棵树上最多能有x个特殊颜色.如果一个节点为特殊颜色,那么他相邻的节点的值只能选比K小的颜色,问一共有多少种染色方案. 分析 不难 ...

  4. Helga Hufflepuff's Cup CodeForces - 855C

    Helga Hufflepuff's Cup CodeForces - 855C 题意:给一棵n个节点的树,要给每一个节点一个附加值,附加值可以为1-m中的一个整数.要求只能有最多x个节点有附加值k. ...

  5. codeforces:Helga Hufflepuff's Cup

    题目大意:有一个包含n个顶点的无向无环连通图G,图中每个顶点都允许有一个值type,type的范围是1~m.有一个特殊值k,若一个顶点被赋值为k,则所有与之相邻的顶点只能被赋小于k的值.最多有x个顶点 ...

  6. Codeforces 219D - Choosing Capital for Treeland(树形dp)

    http://codeforces.com/problemset/problem/219/D 题意 给一颗树但边是单向边,求至少旋转多少条单向边的方向,可以使得树上有一点可以到达树上任意一点,若有多个 ...

  7. codeforces 633F The Chocolate Spree (树形dp)

    题目链接:http://codeforces.com/problemset/problem/633/F 题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的. 显然要求最优解肯定是取最大的 ...

  8. codeforces 486 D. Valid Sets(树形dp)

    题目链接:http://codeforces.com/contest/486/problem/D 题意:给出n个点,还有n-1条边的信息,问这些点共能构成几棵满足要求的树,构成树的条件是. 1)首先这 ...

  9. Codeforces 418d Big Problems for Organizers [树形dp][倍增lca]

    题意: 给你一棵有n个节点的树,树的边权都是1. 有m次询问,每次询问输出树上所有节点离其较近结点距离的最大值. 思路: 1.首先是按照常规树形dp的思路维护一个子树节点中距离该点的最大值son_di ...

随机推荐

  1. Spark学习之路 (十二)SparkCore的调优之资源调优

    摘抄自:https://tech.meituan.com/spark-tuning-basic.html 一.概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都 ...

  2. spring部分注解

    @Controller @SpringBootApplication @Configuration @ComponentScan(basePackages={"first",&qu ...

  3. 找不到命令 ifconfig

    centos 7中自带的查看网络的命令是: ip addr 如果还是想要 ifconfig 安装net-tools yum install net-tools

  4. web前端利用leaflet生成粒子风场,类似windy

    wind.js如下: $(function() { var dixing = L.tileLayer.chinaProvider('Google.Satellite.Map', { maxZoom: ...

  5. window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁

    内存泄露分析插件http://download.eclipse.org/mat/1.3/update-site/birt插件http://download.eclipse.org//birt/upda ...

  6. Nginx rewrite(重写)

    Nginx Rewrite规则相关指令  Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx Re ...

  7. getElementsByClassName方法的封装

    Element.prototype.getElementsByClassName = function(searchClass,node,tag){ if(document.getElementsBy ...

  8. C++重载>>和<<(输入输出运算符)

    在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool.in ...

  9. MySQL字符类型datetime与timestamp

    这片博客来详细分区一下这哥俩! 首先来说明这两个字符类型: DATETIME 8 1000-01-01 00:00:00 ~9999~12-31 23:59:59 0000-00-00 00:00:0 ...

  10. django 动态生成PDF文件

    可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...