[NOI2008]设计路线
题目
做法
神仙题
显然这是棵树
个节点相东仅连接一个结点
不同于剖分,还能存在\("V"\)字型,一个节点最多与另外节点连两条边
\(dp[i][j][k]\)表示\(i\)节点与\(k\)个子节点有连边,子树到根节点最大值为\(j\)的方案数,剩下的就比较简单了
My complete code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e6, lim=10;
struct node{
LL to,next;
}dis[maxn];
LL n,m,p,num;
LL head[maxn],dp[maxn][lim+9][5];
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]}, head[u]=num;
}
inline LL Mod(LL x){
return (x-1)%p+1;
}
void Dfs(LL u,LL fa){
for(LL i=head[u];i;i=dis[i].next){
LL v(dis[i].to);
if(v==fa) continue;
Dfs(v,u);
}
for(LL i=0;i<=lim;++i) dp[u][i][0]=1;
for(LL i=head[u];i;i=dis[i].next){
LL v(dis[i].to);
if(v==fa) continue;
dp[u][0][2]=Mod( dp[u][0][1]*(dp[v][0][0]+dp[v][0][1]) ),
dp[u][0][1]=Mod( dp[u][0][0]*(dp[v][0][0]+dp[v][0][1]) ),
dp[u][0][0]=0;
for(LL j=1;j<=lim;++j){
dp[u][j][2]=Mod( Mod(dp[u][j][2]*(dp[v][j-1][0]+dp[v][j-1][1]+dp[v][j-1][2])) + Mod(dp[u][j][1]*(dp[v][j][0]+dp[v][j][1])) ),
dp[u][j][1]=Mod( Mod(dp[u][j][1]*(dp[v][j-1][0]+dp[v][j-1][1]+dp[v][j-1][2])) + Mod(dp[u][j][0]*(dp[v][j][0]+dp[v][j][1])) ),
dp[u][j][0]=Mod( dp[u][j][0]*(dp[v][j-1][0]+dp[v][j-1][1]+dp[v][j-1][2]) );
}
}
}
int main(){
scanf("%lld%lld%lld",&n,&m,&p);
if(m!=n-1){
printf("-1\n-1");
return 0;
}
for(LL i=1;i<=m;++i){
LL u,v; scanf("%lld%lld",&u,&v);
Add(u,v), Add(v,u);
}
Dfs(1,0);
for(LL i=0;i<=lim;++i)
if(dp[1][i][0]+dp[1][i][1]+dp[1][i][2]){
printf("%lld\n%lld",i,(dp[1][i][0]+dp[1][i][1]+dp[1][i][2])%p);
return 0;
}
return 0;
}
[NOI2008]设计路线的更多相关文章
- 题解P4201: [NOI2008]设计路线
发现给出了一棵树, 不是树的情况直接输出-1 考虑进行DP, 设f[i][0/1/2]为i的子树中选小于等于0/1/2条边修路的方案数, 不妨对于一个节点, 先考虑正好相等的情况, 假设当前扫到了一个 ...
- 洛谷 P4201 设计路线 [NOI2008] 树形dp
正解:树形dp 解题报告: 大概是第一道NOI的题目?有点激动嘻嘻 然后先放个传送门 先大概港下这题的题意是啥qwq 大概就是给一棵树,然后可以选若干条链把链上的所有边的边权变成0,但是这些链不能有交 ...
- [luogu4201][bzoj1063]设计路线【树形DP】
题目描述 Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z国的每个城市所处的经度都不相同,并且最多只和一 ...
- P4201-[NOI2008]设计路线【结论,树形dp】
正题 题目链接:https://www.luogu.com.cn/problem/P4201 题目大意 给出\(n\)个点的一棵树开始所有边都是白色,选出若干条没有公共点的路径将上面所有边变为黑色. ...
- DP学习记录Ⅰ
DP学习记录Ⅱ 前言 状态定义,转移方程,边界处理,这三部分想好了,就问题不大了.重点在状态定义,转移方程是基于状态定义的,边界处理是方便转移方程的开始的.因此最好先在纸上写出自己状态的意义,越详细越 ...
- Spring IoC容器的设计—1—主线
IoC容器的接口设计图 下面对接口关系做一些简要的分析,可以依据以下内容来理解这张接口设计图. 从接口BeanFactory到HierarchicalBeanFactory,再到Configurabl ...
- 1063: [Noi2008]道路设计 - BZOJ
Description Z 国坐落于遥远而又神奇的东方半岛上,在小Z 的统治时代公路成为这里主要的交通手段.Z 国共有n 座城市,一些城市之间由双向的公路所连接.非常神奇的是Z 国的每个城市所处的经度 ...
- Spring源码解析一:IOC容器设计
一.IOC接口设计 IOC容器设计的源码主要在spring-beans.jar.spring-context.jar这两个包中.IOC容器主要接口设计如下: 这里的接口设计有两条主线:BeanFact ...
- [BZOJ]1063 道路设计(Noi2008)
省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...
随机推荐
- 学习spring1--跟我一起学Spring 3(2)–开发环境配置
http://www.importnew.com/13185.html#spring 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所 ...
- Spring MVC内部资源视图解析器
InternalResourceViewResolver用于将提供的URI解析为实际URI.下面的示例演示如何在Spring Web MVC框架中使用SpringResultViewResolver. ...
- 什么是 AJAX?
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行 ...
- 通过 after() 和 before() 方法添加若干新元素
after() 和 before() 方法能够通过参数接收无限数量的新元素.可以通过 text/HTML.jQuery 或者 JavaScript/DOM 来创建新元素. 在下面的例子中,我们创建若干 ...
- 推荐个WIN7下小巧的可转录声音的软件-Audio Record Wizard V6.99
之前是XP上用的是 WaveCN 2.0.0.5,但这个软件好久没更新了,不支持WIN7 最终找到了Audio Record Wizard V6.99,尽管没 WaveCN 2.0.0.5好用,但也全 ...
- day13迭代器与生成器
三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...
- Native VLAN打上标记
802.1Q和ISL都知道两者的区别在于前者对native vlan的流量不打标记,而后者统一都打标记. 配置成Native VLAN的Trunk端口,收到Native VLAN的帧后,不打标记直接从 ...
- timus1716(概率dp)
题意无比诡异. http://acm.timus.ru/problem.aspx?space=1&num=1716 俄罗斯的英文简直把我吓尿. 题意是对于输入:X1X2X3X4(Xi为YES或 ...
- 记录--java 分页 思路 (hibernate关键代码)
有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...
- Linux 入门介绍
背景:最近在搞redis 集群 ,然后有时候会怀疑自己,那么问题来了, 怀疑自己就是自己不扎实! 记忆不好了! 写下来备份吧! 才入门时候总是会想 ,Linux 下面文件夹都是什么意思! bin ...