首页 > 其他分享 >[ARC087F] Squirrel Migration

[ARC087F] Squirrel Migration

时间:2024-11-06 15:08:02浏览次数:1  
标签:rt Squirrel int siz inv void Migration ARC087F mx

模拟赛题,不知道为什么放在最后一题,感觉评分过高了。

首先是经典问题,最大值是 \(\sum \min(siz, n-siz)\),证明考虑每条边上界。

考虑证明的构造,对于重心的每个儿子拉出子树,求出子树大小即可转为序列上问题:每个点不跟内部匹配即可满足最大,容易证明充要。

朴素 dp 发现怎么也避不开两维状态,非常没有前途。

考虑二项式反演,钦定 \(x\) 个点与自己匹配,剩下的方案是好算的,于是 \(f_{i,j}\) 表示考虑前 \(i\) 个子树,其中钦定的有 \(j\) 个的方案,转移枚举这个子树钦定几个,方案数是 \(\binom{siz}{k}^2*fac_k\),统计答案时对于剩下的 \(n-j\) 个点可以随便匹配。

复杂度是 \(O(n^2)\),证明考虑类似树形背包,任意两个点只会被算一次。

const int N = 5005;
int n;
vector <int> e[N];
int A, B, siz[N], rt, rt_siz;
void find_rt(int u, int fa) {
	siz[u] = 1;
	int mx = 0;
	for (auto v : e[u]) if (v != fa) {
		find_rt(v, u);
		siz[u] += siz[v];
		ckmax(mx, siz[v]);
	}
	ckmax(mx, n - siz[u]);
	if (!rt || mx < rt_siz) rt = u, rt_siz = mx;
}
void dfs(int u, int fa) {
	siz[u] = 1;
	for (auto v : e[u]) if (v != fa) dfs(v, u), siz[u] += siz[v];
}
int w[N], tot;
int f[N], g[N], fac[N], inv[N];
void init(int lim) {
	fac[0] = 1;
	for (int i = 1; i <= lim; i++) fac[i] = Cmul(fac[i - 1], i);
	inv[lim] = ksm(fac[lim], mod - 2);
	for (int i = lim; i >= 1; i--) inv[i - 1] = Cmul(inv[i], i);
}
int binom(int n, int m) {
	if (n < m || m < 0) return 0;
	return Cmul(fac[n], inv[m], inv[n - m]);
}

void main01() {
	ios::sync_with_stdio(0), cin.tie(0);
	cin >> n;
	for (int i = 1, u, v; i < n; i++) {
		cin >> u >> v;
		e[u].emplace_back(v);
		e[v].emplace_back(u);
	}
	find_rt(1, 0);
	for (auto v : e[rt]) dfs(v, rt), w[++tot] = siz[v];
	init(n);
	f[0] = 1;
	for (int o = 1, sum = 0, siz; o <= tot; o++) {
		siz = w[o];
		for (int j = 0; j <= sum; j++) if (f[j]) {
			for (int k = 0; k <= siz; k++) {
				Madd(g[j + k], Cmul(f[j], binom(siz, k), binom(siz, k), fac[k]));
			}
		}
		sum += siz;
		for (int j = 0; j <= sum; j++) f[j] = g[j], g[j] = 0;
	}
	for (int i = 0; i <= n; i++) Mmul(f[i], fac[n - i]);
	int ans = 0;
	for (int i = 0; i <= n; i++) {
		if (i & 1) Mdel(ans, f[i]);
		else Madd(ans, f[i]);
	}
	cout << ans << '\n';
}

标签:rt,Squirrel,int,siz,inv,void,Migration,ARC087F,mx
From: https://www.cnblogs.com/Anonymely/p/18530275

相关文章

  • 迁移线程migration
    每个处理器有一个迁移线程,线程名称是“migration/<cpu_id>”,属于停机调度类,可以抢占所有其他进程,其他进程不可以抢占它。迁移线程有两个作用。(1)调度器发出迁移请求,迁移线程处理迁移请求,把进程迁移到目标处理器。(2)执行主动负载均衡。如图所示,每个处理器有一个停机工作管理器,成员......
  • ef core migrations 创建新的迁移程序
    EFCoreMigrations创建一个WebAPI.Migrationsdotnetnewwebapi-nWebAPI.MigrationsProgram.csusingSystem.Reflection;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.EntityFrameworkCore;usingMicrosoft.Extensions.Configuration;usingDataA......
  • thinkphp5数据库迁移工具 migration(longtext/tinyint等)
    我用tp5创建文件phpthinkmigrate:createUser在User文件里面写publicfunctionup(){$this->table('a3')->addColumn('a','integer',['limit'=>'10','default'=>0,'signed'=&......
  • Uruguay Immigration Requirements
    Uruguayoffersarelativelystraightforwardimmigrationprocess,especiallyforthoselookingtoresideinthecountrylong-term.Herearesomegeneralrequirements:1.TouristVisaCitizensfrommanycountries(liketheUS,EU,andCanada)donotrequir......
  • electron-forge通过Squirrel.Windows打包导致的asar文件过大的解决方案
    环境我的Eectron环境如下:"@electron-forge/cli":"^7.1.0","@electron-forge/maker-deb":"^7.1.0","@electron-forge/maker-rpm":"^7.1.0","@electron-forge/maker-squirrel":"^7.1.0",&q......
  • Django 数据库迁移:makemigrations 和 migrate 命令详解及常见问题解决
    目录1.问题所示2.pythonmanage.pymakemigrations3.pythonmanage.pymigrate4.拓展1.问题所示最初始的状态是遇到这个问题由于刚开始跑pythonweb项目,开源项目附带的Readme,个别命令不太懂,对此详细研究其基本知识最终的解决方案如下:清理迁移文件:删除迁移目......
  • Laravel数据库的魔法棒:深入探索数据库迁移(Migrations)
    Laravel数据库的魔法棒:深入探索数据库迁移(Migrations)在Laravel的世界中,数据库迁移(Migrations)是一种强大的工具,它允许开发者以版本控制的方式管理数据库结构的变化。通过迁移,你可以轻松地创建、修改或删除数据库表,同时保持代码的整洁和一致性。本文将带你深入了解Laravel数......
  • Django 做migrations时出错,解决方案
    在做migrations的时候,偶尔会出现出错。在已有数据的表中新增字段时,会弹出下面的信息运行这个命令时pythonmanage.pymakemigrationsTrackingfilebyfolderpattern:migrationsItisimpossibletoaddanon-nullablefield‘example’tobookwithoutspecify......
  • CBM:Cooperative Branch Migration: A Mechanism for Flexible Control of DNA Strand
    作者引入了一种名为“协同分支迁移”(cooperativebranchmigration,CBM)的调控工具,通过调节分支迁移域的互补性来控制DNA链置换。引入的未配对域,后记为UD,作为分离互补区域的间隔物,不仅控制结合亲和力,而且控制链位移动力学。由于未配对域的存在,仅有I时,它很难将P从PS中取代。为了......
  • django 不推荐使用 makemigrations migrate
    个人使用感触,希望大家交流讨论发现用django去管理数据库这些操作,以下两点可能感觉用着还可以,1.对于定义好表结构,字段的这些,并且开发中不修改,很少修改的用着还行,2.习惯用这种方式的,php的laravel也是,不过,试过之后,就很少用了;我说说我的理由:1.最简单的,这边该维护model维护mo......