Time Limit: 20 Sec Memory Limit: 162 MB

Submit: 931 Solved: 509 
[Submit][Status][Discuss] 
Description

  Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代公路成为这里主要的交通手段。Z国共有n座城市,一些城市之间由双向的公路所连接。非常神奇的是Z国的每个城市所处的经度都不相同,并且最多只和一个位于它东边的城市直接通过公路相连。Z国的首都是Z国政治经济文化旅游的中心,每天都有成千上万的人从Z国的其他城市涌向首都。为了使Z国的交通更加便利顺畅,小Z决定在Z国的公路系统中确定若干条规划路线,将其中的公路全部改建为铁路。我们定义每条规划路线为一个长度大于1的城市序列,每个城市在该序列中最多出现一次,序列中相邻的城市之间由公路直接相连(待改建为铁路)。并且,每个城市最多只能出现在一条规划路线中,也就是说,任意两条规划路线不能有公共部分。当然在一般情况下是不可能将所有的公路修建为铁路的,因此从有些城市出发去往首都依然需要通过乘坐长途汽车,而长途汽车只往返于公路连接的相邻的城市之间,因此从某个城市出发可能需要不断地换乘长途汽车和火车才能到达首都。我们定义一个城市的“不便利值”为从它出发到首都需要乘坐的长途汽车的次数,而Z国的交通系统的“不便利值”为所有城市的不便利值的最大值,很明显首都的“不便利值”为0。小Z想知道如何确定规划路线修建铁路使得Z国的交通系统的“不便利值”最小,以及有多少种不同的规划路线的选择方案使得“不便利值”达到最小。当然方案总数可能非常大,小Z只关心这个天文数字modQ后的值。注意:规划路线1-2-3和规划路线3-2-1是等价的,即将一条规划路线翻转依然认为是等价的。两个方案不同当且仅当其中一个方案中存在一条规划路线不属于另一个方案。

Input

  第一行包含三个正整数N、M、Q,其中N表示城市个数,M表示公路总数,N个城市从1~N编号,其中编号为1的是首都 
。Q表示上文提到的设计路线的方法总数的模数。接下来M行,每行两个不同的正数ai、bi(1≤ai,bi≤N)表示有一条 
公路连接城市ai和城市bi。输入数据保证一条公路只出现一次。

Output

  包含两行。第一行为一个整数,表示最小的“不便利值”。第二行为一个整数,表示使“不便利值”达到最小时 
不同的设计路线的方法总数modQ的值。如果某个城市无法到达首都,则输出两行-1。

Sample Input

5 4 100
1 2
4 5
1 3
4 1

Sample Output

1
10

********************************分割线********************************
由题目中的构图方式不难看出这是一棵树,题目中让做的事是将这棵树剖分,使得根到路径上轻链最多的点轻链最少。
树链剖分可以使根到路径上轻链最多的点轻链至多有log n个,也就是说最终答案肯定不超过log n。这样就可以从1开始枚举,直到有一个答案的方案数不为零。
将“点a到点b的路径上有多少条轻链”称为“点a到点b的距离”。
设dp(x,y,z)表示点y向它的子树连了x(1或2)条边,而且要想使根到所有点的距离符合要求,就必须让y的子树中所有点到y的距离不超过z。

现在假设要求出dp(0/1/2,u,dep),已经算到了u的第p个儿子v,而且dp(0/1/2,v,dep)和dp(0/1/2,v,dep-1)已经求出。

设tmp1=dp(0,v,dep)+dp(1,v,dep)(这是u有连重链到v的情况),tmp2=dp(0,v,dep-1)+dp(1,v,dep-1)+dp(2,v,dep-1)(这是u没有重链到v的情况)。

当u到子树有两条边时,两条边中的一条可能是到v的,也可能不是。

当u到子树有一条边时,这一条边可能是到v的,也可能不是。

当u没有边到子树时,肯定没有边到v。

这样就能得出转移方程了,并不对劲的人表示代码里有,并不打算写在这里。

需要注意的是,dp的初值是1,而且有可能出现mod q之后恰巧为零的情况,所以取模时如果结果为0,要改成Q。

只有不能构成一棵树时要输出-1。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<cstdlib>
#define maxn 100010
#define maxm maxn*2
#define ll long long
using namespace std;
ll n,fir[maxn],nxt[maxm],v[maxm],cnt,m,p;
ll dp[][maxn][],f[maxn],son[maxn];
bool vis[maxn][];
ll read(){
ll x=,f=;
char ch=getchar();
while(isdigit(ch)== && ch!='-')ch=getchar();
if(ch=='-')f=-;
while(isdigit(ch))x=x*+ch-'',ch=getchar();
return x*f;
}
ll log2(ll x){
for(ll tmp=,i=;;tmp<<=,i++){
if(tmp*>x||tmp>=x)return i;
}
}
void addedge(ll u1,ll v1){v[cnt]=v1,nxt[cnt]=fir[u1],fir[u1]=cnt++;}
ll getf(ll u){return f[u]<?u:(f[u]=getf(f[u]));}
void add(ll u,ll v){
ll fu=getf(u),fv=getf(v);
if(fu==fv)return;
if(fu>fv)swap(fu,fv);
f[fu]+=f[fv];
f[fv]=fu;
}
ll mod(ll x){
return (x%p== && x!=)?p:x%p;
}
void solve(ll u,ll dep){
if(vis[u][dep])return;
vis[u][dep]=;
for(ll k=fir[u];k!=-;k=nxt[k]){
ll vv=v[k];
if(vv!=f[u]){
f[vv]=u;
solve(vv,dep);solve(vv,dep-);
ll x=dp[][vv][dep]+dp[][vv][dep],//One road to tree vv.
y=dp[][vv][dep-]+dp[][vv][dep-]+dp[][vv][dep-];//No roads to tree vv.
x=mod(x),y=mod(y);
dp[][u][dep]=mod(dp[][u][dep]*y+dp[][u][dep]*x);
dp[][u][dep]=mod(dp[][u][dep]*y+dp[][u][dep]*x);
dp[][u][dep]=mod(dp[][u][dep]*y);
}
}
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=read(),m=read(),p=read();
memset(f,-,sizeof(f));
memset(fir,-,sizeof(fir));
for(ll i=;i<=m;i++){
ll x=read(),y=read();
addedge(x,y);
addedge(y,x);
add(x,y);
}
if(f[]!=-n)cout<<-<<endl<<-;
else{
memset(f,-,sizeof(f));
ll lim=log2(n);
for(ll i=;i<=n;i++){
for(ll j=;j<=lim;j++){
dp[][i][j]=;dp[][i][j]=dp[][i][j]=;
}
}
for(ll i=;i<=lim;i++){
solve(,i);
if(dp[][][i]!= || dp[][][i]!= || dp[][][i]!=){
cout<<i<<endl<<(dp[][][i]%p+dp[][][i]%p+dp[][][i]%p)%p;
break;
}
}
}
return ;
}
/*
5 4 100
1 2
4 5
1 3
4 1
*/

XD

并不对劲的[Noi2008]道路设计的更多相关文章

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

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

  2. [bzoj1063][Noi2008]道路设计

    来自FallDream的博客,未经允许,请勿转载,谢谢. Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是 ...

  3. BZOJ1063 NOI2008 道路设计 树形DP

    题目传送门: BZOJ 题意精简版:给出一棵树,在一种方案中可以将树的若干链上的所有边的边权改为$0$,但需要保证任意两条链之间没有交点.问最少的一种方案,使得从根节点到其他节点经过的边的边权和的最大 ...

  4. [NOI2008] 道路设计

    link 思维题目,题目描述其实说的就是这是一个树,想到树形$dp$.若两个铁路不向交,则每个点的度都$\leq 2$.所以现在就可以搞dp了. 怎么去维护答案,容易想到设$dp(i,j,k)$为现在 ...

  5. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. dp专练

    dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...

  8. 【BZOJ1063】【NOI2008】道路设计(动态规划)

    [BZOJ1063][NOI2008]道路设计(动态规划) 题面 BZOJ 题解 发现每个点最多只能被修一次等价于每个点最多只能和两条铁路相邻 考虑一个\(dp\) 设\(f[i][0/1/2]\)表 ...

  9. BZOJ 1063 道路设计NOI2008

    http://www.lydsy.com/JudgeOnline/problem.php?id=1063 题意:给你一棵树,也有可能是不连通的,把树分成几个链,求每个点到根经过的最大链数最小,而且要输 ...

随机推荐

  1. PHPExcel读取表格内容

    PHPExcel读取表格 先引入类IOFactory.php require_once '../PHPExcel/IOFactory.php'; $filePath = "test.xlsx ...

  2. python_流程控制

    1.if...else 语句 单分支 if 条件:    满足条件后要执行的代码 双分支: """ if 条件: 满足条件执行代码 else: if条件不满足就走这段 & ...

  3. YOLOv3配置(win10+opencv3.40+cuda9.1+cudnn7.1+vs2015)

    最近心血来潮想学一下YOLOv3,于是就去网上看了YOLOv3在win10下的配置教程.在配置过程中塌坑无数,花了很多时间和精力,所以我想就此写一篇博客来介绍在在win10+vs2015的环境下如何配 ...

  4. UVa Sculpture(离散化 floodfill)

    题意: 给定n个立方体的一个顶点坐标和3边长度,  问这些立方体组成的雕塑的表面积和体积,   坐标都是整数,n最大为50,  最大为500, 边长最大也是500. 分析: 继UVa221后又一道离散 ...

  5. 主席树初探--BZOJ2588: Spoj 10628. Count on a tree

    n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线. 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的 ...

  6. Rikka with Phi 线段树

    Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds ...

  7. SOJ 4454 (矩阵快速幂)

    先引入数的快速幂 例如计算2的5次方,常规算法2*2*2*2*2,利用快速幂的思想,求出5的二进制表达式101,权值为1和4的位上数字为1,即2^5=2^1*2^4.代码如下,时间复杂度为O(logn ...

  8. Ubuntu 16.04安装Redis

    版本:4.0.2 下载地址:https://redis.io/download 离线版本:(链接: https://pan.baidu.com/s/1bpwDtOr 密码: 4cxk) 安装过程: 源 ...

  9. Ubuntu 16.04安装录屏软件SimpleScreenRecorder

    安装: sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder sudo apt-get update sudo apt-get ...

  10. spring mvc 访问静态资源404

    访问比如css js出现404提示 在spring的配置文件中加上如下代码即可 <!-- 静态资源404 --> <mvc:resources location="/res ...