bzoj1063: [Noi2008]道路设计

2024-04-02 10:38

本文主要是介绍bzoj1063: [Noi2008]道路设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1063

思路:首先m<n-1肯定不连通,先写个特判。

设f[i][j][k]表示以i为根的子树中,最大不便利值为j(到i的最多经过的公路条数),i向儿子连了k条铁路(k=0,1,2)的方案数

然后就是最关键的一步了。

j<log3(n)

这有些类似树链剖分,如果用树链剖分的想法,那么可证j<log2(n),其实也已经可以做了。

具体可以证明在3叉树时达到上限log3(n),可以自己画图看一下。

然后DP方程及转移就出来了:

设当前点为x,v是x的儿子

f1=f[v][j-1][0]+f[v][j-1][1]+f[v][j-1][2],f2=f[v][j][0]+f[v][j][1]

f1不向这个儿子建铁路,f2向这个儿子建铁路 

f[x][j][2]=f[x][j][2]*f1+f[x][j][1]*f2

f[x][j][1]=f[x][j][1]*f1+f[x][j][0]*f2

f[x][j][0]=f[x][j][0]*f1


然后从小到大,0-log3(n)扫一遍,有方案就输出即可

#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxn=100010,maxm=200010,lim=10;
typedef long long ll;
using namespace std;
int pre[maxm],now[maxn],son[maxm],tot;
int n,m,Q;ll f[maxn][12][3];//i的子树,子树内最大不便利值为j,向儿子修的铁路条数k方案数。 
void add(int a,int b){pre[++tot]=now[a],now[a]=tot,son[tot]=b;}
int get(ll t){return !t?0:t%Q?t%Q:Q;}//如果方案数%Q==0就设为Q,不能直接设为0,否则会被当成没有方案 void dfs(int x,int fa){int cnt=0;for (int y=now[x];y;y=pre[y]) if (son[y]!=fa) dfs(son[y],x),cnt++;for (int i=0;i<=lim;i++) f[x][i][0]=1;if (!cnt) return;for (int y=now[x];y;y=pre[y]) if (son[y]!=fa){int v=son[y];for (int j=0;j<=lim;j++){ll t,f1=!j?0:f[v][j-1][0]+f[v][j-1][1]+f[v][j-1][2],f2=f[v][j][0]+f[v][j][1];//f1不向这个儿子建铁路,f2向这个儿子建铁路 t=(ll)f[x][j][2]*f1+(ll)f[x][j][1]*f2;f[x][j][2]=get(t);t=(ll)f[x][j][1]*f1+(ll)f[x][j][0]*f2;f[x][j][1]=get(t);t=(ll)f[x][j][0]*f1;f[x][j][0]=get(t);}}
}int main(){scanf("%d%d%d",&n,&m,&Q);for (int i=1,a,b;i<=m;i++) scanf("%d%d",&a,&b),add(a,b),add(b,a);if (m<n-1){puts("-1\n-1");return 0;}dfs(1,0);ll sum;for (int i=0;i<=lim;i++) if (sum=f[1][i][0]+f[1][i][1]+f[1][i][2]) return printf("%d\n%d\n",i,(int)sum%Q),0;return 0;
}


这篇关于bzoj1063: [Noi2008]道路设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869761

相关文章

bzoj 1061 [Noi2008]志愿者招募 单纯形算法

Description   申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者。经过估算,这个项目需要N 天才能完成,其中第i 天至少需要 Ai 个人。 布布通过了解得知,一共有M 类志愿者可以招募。其中第i 类可以从第Si 天工作到第Ti 天,招募费用 是每人Ci 元。新官上任三把火,为了出色地完

【NOI2008】 奥运物流

题目描述 奥运物流【问题描述】2008 北京奥运会即将开幕,举国上下都在为这一盛事做好准备。为了高效率、成功地举办奥运会,对物流系统进行规划是必不可少的。物流系统由若干物流基站组成,以 1...N 进行编号。每个物流基站 i 都有且仅有一个后继基站 Si,而可以有多个前驱基站。基站 i 中需要继续运输的物资都将被运往后继基站 Si,显然一个物流基站的后继基站不能是其本身。

Bentley ORD(openroads designer) 二次开发(BIM)第三节 BIM软件 Bentley OpenRoads Designer道路设计软件功能

这是一篇划水的文章 Bentley OpenRoads Designer 是一款功能完善、全面详细的道路设计BIM软件,适用于勘测、排水、地下设施和道路设计,取代以往通过 InRoads、GEOPAK、MX 和 PowerCivil 提供的所有功能。引入全新的综合建模环境,提供以施工驱动的工程设计,有助加快路网项目交付,统一从概念到竣工的设计和施工过程。 道路设计BIM软件OpenRoad