题目

洛谷

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. Android DRM

    最近在了解Android DRM相关的一些知识,下面转一个ARM大佬分享的内容: 前言 本文简略地介绍了如何在Android下实现DRM(Digital Rights Management, 数字版权 ...

  2. asp.net mvc FormsAuthentication一些问题

    form验证最简单的一句 FormsAuthentication.SetAuthCookie(”userName", false); web.config里加上    <machine ...

  3. Ant Design使用问题记录

    公司的测试管理平台前端使用的是Ant Design of React框架,后台使用的是python,数据库用的是mysql.没有参与前期的开发,听说是工作了10年积累下来的一个暂且可用的管理平台,开发 ...

  4. SlidingMenu官方实例分析8——CustomAnimation

    CustomAnimation 构造方法: 其中CanvasTransformer对象是重点,因为他是实现动画的对象,设置对象的代码如下: 其中变化方法如下: 其中的canvas.scale(),方法 ...

  5. ios -特殊符号大全分享给大家,直接复制粘贴就可以使用了!

    ░ ▒ ▬ ♦ ◊ ◦ ♠ ♣ ▣ ۰•● ❤ ●•۰ ► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ▪ ▫ ☼ ♦ ♧♡♂♀♠♣♥❤☜☞☎☏⊙◎ ☺☻☼▧▨♨◐◑↔↕▪ ▒ ◊◦▣▤▥ ▦▩◘ ◈◇♬♪♩♭♪ ...

  6. Sequence I

    Sequence I (hdu 5918) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  7. MySQL (时间)日期相减取天数

    select TO_DAYS(str_to_date('12/1/2001 12:00:00 AM','%m/%d/%Y')) -TO_DAYS(str_to_date('11/28/2001 12: ...

  8. nosql_action

    ps -aux  查当前端口占用 connecting to: test > show dbs local .078125GB testphp .203125GB > use testph ...

  9. Js slice()方法和splice()方法

    1.slice(start,end) 从已有的数组中返回选定元素,参数start必填,end选填 <script> delArray(); function delArray(){ var ...

  10. 批处理 ECHO命令输出空行

    众所周知,如果echo后面跟一个环境变量,但是该变量却为空时,相当于不加任何参数的echo,即输出当前echo是on还是off.很多文章或者教程给出的解决方案都是在echo后面加一个点号echo.,这 ...