首页 > 其他分享 >【刷题笔记】[ABC281G] Farthest City

【刷题笔记】[ABC281G] Farthest City

时间:2024-10-10 16:36:05浏览次数:8  
标签:一层 City Farthest 短路 times ABC281G maxn ll 个点

【刷题笔记】[ABC281G] Farthest City

题意

求构造一个没有重边和自环【简单联通】的无向连通图,使得\(d[n]\)严格大于\(d[i]\),问有几种构造方案

思路

一道\(DP\)好题
\(DP\)有\(2\)种题型,求最优值问题,和计数问题。本题为计数问题。
因为在边权为1的最短路中

\[d[i]=d[i-1]+1 \]

所以对于一个最短路最长为\(x\)的连通图,最短路长度为\(i,0\le i \le x\)的点,个数一定大于等于\(1\)
多画几组样例就可以发现,可以将图进行分层。
我们将最短路长度相同的点分到一层,这一层其实就是动态规划中的一个阶段。
假设当前图的总点数为\(i\),最后一层选了\(j\)个点,容易发现这\(j\)个点对答案的贡献只与上一层的点的个数有关。于是状态就出来了

\[f[i][j] \]

表示当前有\(i\)个点,最后一层选了\(j\)个点时的构造方案数。
再考虑如何计算贡献。假设最后一层有\(j\)个点,上一层有\(k\)个点。容易发现最后一层的点,每一个至多和上一层连\(k\)条边,至少连\(1\)条边。
所以每一个点于上一层有

\[C_k^1+C_k^2+...C_k^k=2^k-1 \]

种方案。而当前层有\(j\)个点,所以共有

\[(2^k-1)^j \]

种方案
观察样例可以发现同一层种任意两点之间连边不会影响啊最短路长度,而两点间一共有\(\frac{j\times (j-1)}{2}\)条边,而每条边有选与不选两种情况,因此共

\[2^{\frac{j\times (j-1)}{2}} \]

种方案
由于一共有\(n\)个点,一共选了\(i\)个点,最后一层有\(j\)个,而第\(n\)个点不能选所以\(j\)可以从

\[n-(i-j)-1=n-i+j-1 \]

因此有

\[C_{n-i+j-1}^j \]

种选法
最后相加求和,愉快的得到\(DP\)方程

\[f_{i,j}=\sum_{k = 1}^{i-j} f_{i-j,k}\times (2^k-1)^j\times 2^{\frac{j\times (j-1)}{2}} \times C_{n-i+j-1}^j \]

而答案就是

\[f_{n,1} \]

attention

1.注意当遍历到\(n\)层时,共有

\[C_{n-i-j}^j \]

种选法,因为第\(n\)个点此时可以备选 。
2.有许多幂运算可以被提前预处理,处理时注意\(x^0=1\)
3.\(\%\)和\(*\)是同级运算符,不用加括号,从左到右取余即可,不要写括号树了

code

#include<bits/stdc++.h>
#define maxn 510
#define ll long long
using namespace std;
ll n,m;
ll c[maxn][maxn],h[maxn][maxn],f[maxn][maxn],g[maxn*maxn];
ll s[maxn][maxn];
void pre1(){
	c[1][1]=1;c[1][0]=1;
	for(int i=2;i<=n;i++){
		c[i][0]=1;
		for(int j=1;j<=i;j++){
			c[i][j]=(c[i-1][j]+c[i-1][j-1])%m;
		}
	}
	c[0][0]=1;c[0][1]=1;
}
ll fast(ll a,ll p){
	ll s=1;
	a%=m;
	while(p){
		if(p&1)s=(s*a)%m;
		a=(a*a)%m;
		p>>=1;
	}
	return s;
}
void pre2(){
	g[0]=1;
	for(int i=1;i<=n*n;i++){
		g[i]=(g[i-1]*2)%m;
	}
}
void pre3(){
	for(int i=1;i<=n;i++){
		s[i][0]=1;
		for(int j=1;j<=n;j++){
			s[i][j]=(s[i][j-1]*((g[i]-1+m)%m))%m;
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	pre1();
	pre2();
	pre3();
	//cout<<s[3][4];
	f[1][1]=1;
	for(int i=2;i<=n;i++){
		for(int j=1;j<i;j++){
			for(int k=1;k<=i-j;k++){
				ll cur;
				if(i==n)cur=n-i+j;
				else cur=n-i+j-1;
				f[i][j]=(f[i][j]+f[i-j][k]*c[cur][j]%m*s[k][j]%m*g[j*(j-1)/2]%m)%m;
				//f[i][j]=(f[i][j]+((f[i-j][k]*c[cur][j])%m*(s[k][j]*g[(j*(j-1))/2])%m)%m)%m;
				//cout<<f[i][j]<<' '; 
			}
		}
	}
	cout<<f[n][1];
	return 0;
} 

标签:一层,City,Farthest,短路,times,ABC281G,maxn,ll,个点
From: https://www.cnblogs.com/GSNforces/p/18456629

相关文章

  • rgba 和 opacity 有什么区别呢?
    rgba和opacity是CSS中用于控制元素颜色和透明度的两个属性。1.rgba属性rgba是CSS中的一种颜色值,用于定义颜色和透明度(alpha通道)。它扩展了传统的RGB颜色模型,增加了一个额外的透明度(alpha)分量。格式:color:rgba(red,green,blue,alpha);即color:rgba(0,0,0,.5);re......
  • 事务 Atomicity Consistency Isolation Durability
    事务分类:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。原子性:(Atomicity)被执行的事务要么全部成功,要么全部失败,不能只单独执行一个。例如:有两个用户A和B,A原本有1000元,B原本有500元,A向B转账200元,将执行A变成800元和B变成700元,或者A不变并且B也不变,这两......
  • 易优CMS安装时,提示在写入表ey_weapp_multicity记录失败-eyoucms
    当你在安装易优CMS时遇到“写入表ey_weapp_multicity记录失败”的提示时,这通常意味着在安装过程中数据库出现了问题,可能是由于数据库连接问题、权限问题、数据冲突等原因造成的。以下是一些可能的解决步骤:步骤1:检查数据库连接确认数据库连接信息确保数据库连接信息(主机名......
  • MISC - 第四天(OOK编码,audacity音频工具,摩斯电码,D盾,盲文识别,vmdk文件压缩)
    前言各位师傅大家好,我是qmx_07,今天继续讲解MISC知识点FLAG附件是一张图片,尝试binwalk无果使用StegSolve工具DataExtract查看时发现PK字段,是大多数压缩包的文件头点击SaveBin保存zip文件解压缩失败使用修复软件:http://forspeed.onlinedown.net/down/95222_201706......
  • SQLSTATE[42S02]: Base table or view not found: 1146 Table '***.ey_citysite' does
    根据提供的错误信息 SQLSTATE[42S02]:Basetableorviewnotfound:1146Table'***.ey_citysite'doesn'texist,这个错误表明数据库中不存在名为 ey_citysite 的表或视图。以下是一些可能的解决步骤:1.确认表是否存在首先确认表是否真的存在。使用SQL命令检查表可以......
  • Linux内核中cpu_capacity是什么?
    cpu_capacity在Linux内核中,cpu_capacity是用于表示每个CPU的处理能力的一个参数,通常用于调度器的负载均衡。它表明不同的CPU核心在计算资源分配中的相对性能,尤其在异构多核架构(如ARM的big.LITTLE架构)中,不同的核心可能具有不同的计算能力。主要概念同构和异构架构:在同构架......
  • Tenacity -- Retrying library for Python
    RetryinglibraryforPythonhttps://github.com/jd/tenacity Pleaserefertothetenacitydocumentationforabetterexperience.TenacityisanApache2.0licensedgeneral-purposeretryinglibrary,writteninPython,tosimplifythetaskofaddingretry......
  • 返回到互联5年,精心打磨建站利器(城市分站AllCity)让你轻松建网站立马赢出来
    建立城市分站有什么优点?城市分站是指在当前城市范围内建立一个网站,以实现该城市的信息全面覆盖和更好的用户体验。目的是为了满足当地不同用户的需求,提供更加个性化和本地化的服务。在建立城市分站时,需要考虑以下几个方面:1.确定站点主题和定位首先需要确定每个站点的主题和......
  • 抛物线绘制 代码 ForceMode.VelocityChange,这种模式,忽略质量变化的影响 , 质量默认为1
    publicLineRenderer线渲染器;publicVector3[]线的点们=newVector3[60];publicTransform发射点;publicfloat力度=10;publicfloat细分长度=.02f;publicGameObject子弹;voidUpdate(){for(intfFor=0;fFor<线的点们.Length;f......
  • CSS隐藏元素的几种方法,以及他们之间的区别,opacity/visibility/display/rgba函数对比
    文章目录概要displayvisibilityopacitybackground比对概要在网页设计中,我们经常需要将一个元素隐藏或者显示,而需求不同时,不同的隐藏方式也会带来不同的隐藏效果,我们来看看集中隐藏方式的不同。display浏览器不会生成属性为display:none;的元素。dis......