题目

洛谷

BZOJ

做法

神仙题

显然这是棵树

个节点相东仅连接一个结点

不同于剖分,还能存在\("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]设计路线的更多相关文章

  1. 题解P4201: [NOI2008]设计路线

    发现给出了一棵树, 不是树的情况直接输出-1 考虑进行DP, 设f[i][0/1/2]为i的子树中选小于等于0/1/2条边修路的方案数, 不妨对于一个节点, 先考虑正好相等的情况, 假设当前扫到了一个 ...

  2. 洛谷 P4201 设计路线 [NOI2008] 树形dp

    正解:树形dp 解题报告: 大概是第一道NOI的题目?有点激动嘻嘻 然后先放个传送门 先大概港下这题的题意是啥qwq 大概就是给一棵树,然后可以选若干条链把链上的所有边的边权变成0,但是这些链不能有交 ...

  3. [luogu4201][bzoj1063]设计路线【树形DP】

    题目描述 Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z国的每个城市所处的经度都不相同,并且最多只和一 ...

  4. P4201-[NOI2008]设计路线【结论,树形dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4201 题目大意 给出\(n\)个点的一棵树开始所有边都是白色,选出若干条没有公共点的路径将上面所有边变为黑色. ...

  5. DP学习记录Ⅰ

    DP学习记录Ⅱ 前言 状态定义,转移方程,边界处理,这三部分想好了,就问题不大了.重点在状态定义,转移方程是基于状态定义的,边界处理是方便转移方程的开始的.因此最好先在纸上写出自己状态的意义,越详细越 ...

  6. Spring IoC容器的设计—1—主线

    IoC容器的接口设计图 下面对接口关系做一些简要的分析,可以依据以下内容来理解这张接口设计图. 从接口BeanFactory到HierarchicalBeanFactory,再到Configurabl ...

  7. 1063: [Noi2008]道路设计 - BZOJ

    Description Z 国坐落于遥远而又神奇的东方半岛上,在小Z 的统治时代公路成为这里主要的交通手段.Z 国共有n 座城市,一些城市之间由双向的公路所连接.非常神奇的是Z 国的每个城市所处的经度 ...

  8. Spring源码解析一:IOC容器设计

    一.IOC接口设计 IOC容器设计的源码主要在spring-beans.jar.spring-context.jar这两个包中.IOC容器主要接口设计如下: 这里的接口设计有两条主线:BeanFact ...

  9. [BZOJ]1063 道路设计(Noi2008)

    省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...

随机推荐

  1. ffmpeg中的x264编码选项,对应关系

    )’ Disabled. ‘variance (1)’ Variance AQ (complexity mask). ‘autovariance (2)’ Auto-variance AQ (expe ...

  2. English 好的报纸

    1. 高级阶段 China daily: ( 带有官方色彩 ) www.chinadaily.com.cn 2. econnomist ( 经济人报 ) www.econnomist.com

  3. javascript 最佳实践 ( 24 章 )

    代码约定 易于维护, 形成了一套 JavaScript 代码书写的约定: 跟别的语言差不多, 不过 javascript 中的大括号一定要放在 行尾, 例如: function abc() { // ...

  4. Android获取网络类型

    public static final String NETWORK_CLASS_UNKNOWN = "unknown"; public static final String N ...

  5. 【Android 多语言切换简单实例分享】

    一.Android多语言切换 Android应用的开发不可能仅仅针对某一个国家或者区域使用,各国间语言文化各不同样,因此一个优秀的APP必须支持多种语言,为了实现这个特性,Android给出了一个解决 ...

  6. windows Objective-C模拟环境搭建

    安装GNUstep GNUstep Windows Installer提供了Windows平台下的Objective-C的模拟开发环境,一共有四个软件包,其中GNUstep System和GNUste ...

  7. hdu1754(splay tree 单点更新,成段查询)

    题意就是简单的点更新,成段查询. splay tree 果真是常数比较大的log(n)操作. 比线段树还慢了这么多. // // main.cpp // splay // // Created by ...

  8. JSP -> f:loadBundle用法

    jsp中出现<f:loadBundle basename="messages_zh_CN" var="msgs" /> 还有src目录下有messa ...

  9. 基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能

    提出问题 EasyNVR是一套摄像机无插件直播的流媒体服务器软件,他可以接入各种各样的摄像机,再经过转化统一输出无插件化直播的RTMP.HLS.HTTP-FLV流,同时,EasyNVR为了数据安全,提 ...

  10. Oracle 常用

    1. 级联查询 在ORACLE 数据库中有一种方法可以实现级联查询select *                //要查询的字段from table              //具有子接点ID与父 ...