题目

洛谷

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. Linux make语法

    make是一种控制编译或者重复编译软件的工具. make可以自动关键软件的编译内容.方式和时机,从而使程序员把更多的精力集中在编写代码上. make主要的机制是在命令行键入make命令,make会自动 ...

  2. jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、

    脚 本 之 家 www.jb51.net 脚本云 专题 素材下载 电子书 软件下载 源码下载 服务器常用软件 a5交易 首页 网页制作 脚本专栏 脚本下载 网络编程 数据库 CMS教程 电子书籍 平面 ...

  3. Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器解析)

    make解析 服务容器对对象的自动解析是服务容器的核心功能,make 函数.build 函数是实例化对象重要的核心,先大致看一下代码: public function make($abstract) ...

  4. 多用户商城系统 KgMall2.1公布

    2014-5-28日,广州JUULUU公布多用户商城系统 KgMall2.1,kgMall是国内一款JAVA开源多用户版商城系统,新版KgMall更加模块化,juuluu团队重构了Kgcms的多个模块 ...

  5. gcc 编译 连接 生成可执行文件

    gcc c语言编译器 g++ c++编译器 gcc a.c  生成默认的a.out 可执行文件  ./a.out  来执行 gcc -c a.c 编译生成 a.o 目标文件 可以检查语法错误 gcc ...

  6. 【BZOJ4066】简单题 KDtree

    [BZOJ4066]简单题 Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y& ...

  7. 1307 绳子与重物(DFS)

    1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量 ...

  8. Storm 提交任务过程详解 (不对地方麻烦指正)

    1.使用的是Storm中自带的一个测试jar包 提交下这任务到storm中去 storm jar /usr/local/app/storm/examples/storm-starter/storm-s ...

  9. Maven 手动把本地jar安装到本地仓库

    首先,你要安装的.jar包要下载下来放在电脑上面,然后maven已经配置好了,如下图: 然后,执行一下命令就可以了 mvn install:install-file -Dfile=path-to-fi ...

  10. IlRuntime + protobuf-net

    环境unity566,.net2.0 下载protobuf-net https://github.com/mgravell/protobuf-net/tree/r668 因为这个vs2015就可以打开 ...