BZOJ 1063 道路设计NOI2008
http://www.lydsy.com/JudgeOnline/problem.php?id=1063
题意:给你一棵树,也有可能是不连通的,把树分成几个链,求每个点到根经过的最大链数最小,而且要输出方案数。
思路:考虑dp,f[i][j]代表第i个节点,最大链数是j,那么有
f[i][j][0]代表已经向子树连接了0个链
f[i][j][1]代表已经向子树连接了1个链
f[i][j][2]代表已经向子树连接了2个链
这样转移就是
f1=f[pur][b][0]+f[pur][b][1]
f2=f[pur][b-1][0]+f[pur][b-1][1]+f[pur][b-1][2]
f[x][b][2]=f2*f[x][b][2]+f1*f[x][b][1]
f[x][b][1]=f1*f[x][b][0]+f2*f[x][b][1]
f[x][b][0]=f[x][b][0]*f2
pur代表x的儿子
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
ll Mod;
int first[],next[],go[],tot;
int n,m,fa[];
ll f[][][];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<='') {t=t*+ch-'';ch=getchar();}
return t*f;
}
void insert(int x,int y){
tot++;
go[tot]=y;
next[tot]=first[x];
first[x]=tot;
}
void add(int x,int y){
insert(x,y);insert(y,x);
}
int find(int x){
if (fa[x]==x) return x;else return fa[x]=find(fa[x]);
}
ll get(ll x){
if (x%Mod!=) return x%Mod;
if (x!=) return Mod;
return ;
}
void dfs(int x,int b,int fa){
f[x][b][]=;
f[x][b][]=;
f[x][b][]=;
for (int i=first[x];i;i=next[i]){
int pur=go[i];
if (pur==fa) continue;
dfs(pur,b,x);
ll f1=(f[pur][b][]+f[pur][b][]);
ll f2;
if (b) f2=f[pur][b-][]+f[pur][b-][]+f[pur][b-][];else f2=;
f[x][b][]=get(f2*f[x][b][]+f1*f[x][b][]);
f[x][b][]=get(f1*f[x][b][]+f2*f[x][b][]);
f[x][b][]=get(f[x][b][]*f2);
}
}
int main(){
n=read();m=read();Mod=read();
for (int i=;i<=n;i++) fa[i]=i;
for (int i=;i<=m;i++){
int x=read(),y=read();
add(x,y);
int p=find(x),q=find(y);
if (p!=q) fa[q]=p;
}
for (int i=;i<=n;i++)
if (find(i)!=find()){printf("-1\n-1\n");return ;}
for (int i=;;i++){
dfs(,i,);
if (f[][i][]+f[][i][]+f[][i][]){
printf("%d\n",i);
printf("%lld\n",((f[][i][]+f[][i][])%Mod+f[][i][])%Mod);
return ;
}
}
}
BZOJ 1063 道路设计NOI2008的更多相关文章
- [BZOJ]1063 道路设计(Noi2008)
省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...
- BZOJ 1063 道路设计(树形DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1063 题意:给出一个无环图( 也就是树,但是也有可能是森林),代表一个国家的城市.1是首 ...
- 【NOI题解】【bzoj题解】NOI2008 bzoj1063 道路设计
@ACMLCZH学长出的毒瘤题T3.再也不是“善良”的出题人了. 题意:bzoj. 题解: 经典的树形DP题目,屡见不鲜了,然而我还是没有写出来. 这一类的题目有很多,例如这里的C题. 主要套路是把对 ...
- bzoj 1064【noi2008】假面舞会
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1064 给一个有向图染色,每个点的后继必须相同,问至少&至多有多少种染色方案 sol: ...
- 【BZOJ】1061: [Noi2008]志愿者招募
题解 可能是世界上最裸的一个单纯形 (话说全幺模矩阵是啥我到现在都不知道) 假装我们已经看过了算导,或者xxx的论文,知道了单纯形是怎么实现的 扔一个blog走掉..https://www.cnblo ...
- 【BZOJ】1064: [Noi2008]假面舞会(判环+gcd+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 表示想到某一种情况就不敢写下去了.... 就是找环的gcd...好可怕.. 于是膜拜了题解.. ...
- 【BZOJ】1061: [Noi2008]志愿者招募(费用流+数学)
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建 ...
- dp专练
dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...
- BZOJ1000-1099板刷计划+一句话题解 73/100
1000-1009 1000A+B Problem 这个还要写??? 1001 狼抓兔子 平面图最小割转化为对偶图最短路 #include<bits/stdc++.h> #define i ...
随机推荐
- xdebug及webgrind的联用
参考URL: http://www.tuicool.com/articles/ERFNva http://blog.sina.com.cn/s/blog_635833b3010127q5.html h ...
- 转:使用linq to sql 随机取一行数据的方法
原文地址:http://outofmemory.cn/code-snippet/1760/usage-linq-to-sql-suiji-take-yixing-data-method 虽然这看来已经 ...
- cf493C Vasya and Basketball
C. Vasya and Basketball time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Entify Framewrok - Join的使用方法
问题:有2个表,使用id相连,如何用Join语法将其连接起来? 如下代码 List<tblAssociation> assoList = dataContext.tblAssociatio ...
- win10 下安装、配置、启动mysql
1.下载http://dev.mysql.com/downloads/mysql/ 2.Community > MySQL Community Server 3.Other Downloads: ...
- MyBatis配置解析
MyBatis配置文件解析(概要) 1.configuration:根元素 1.1 properties:定义配置外在化 1.2 settings:一些全局性的配置 1.3 typeAliases:为 ...
- web前端代码规范 - HTML代码规范
Bootstrap HTML编码规范 本文转载自w3cschool. 由于bootstrap得到了世界的认可,因此,此规范用于规范html代码有一定的说服力. 交流qq群:164858883.欢迎各位 ...
- 在Servlet中使用spring注入的bean
package abu.csdn.servlet; import java.io.IOException; import javax.servlet.ServletContext; ...
- Java 反射 方法调用
在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...
- 关于sed的应用
公司让我做一个看一下在优化的程序和比原来的程序快多少,但是文件还在运行的服务器上,我需要把用到的文件复制到测试服务器上去.但是测试服务器上有的,目录不全,会导致scp出错.就发生了以下的故事. 首选我 ...