首页 > 其他分享 >[联合省选2021 A卷] 图函数

[联合省选2021 A卷] 图函数

时间:2022-08-22 17:36:20浏览次数:94  
标签:const 函数 省选 路径 int 2021 ans 编号 dp

经典套路还是不熟练啊。

首先有一个显然的性质就是在计算 \(f(u,G)\) 时我们可以当成 \(v\) 以前的点都删了。

假设有一个 \(v\) 之前的点没被删,如果 \(v\) 可以通过这个点走到 \(u\),那么 \(u\) 一定无法走到 \(v\);如果 \(u\) 可以通过这个点走到 \(v\),那 \(v\) 一定无法走到 \(u\)。

由此很容易想到一个 dp:\(f_{i,j}\) 表示 \(i\) 走到 \(j\) 经过的编号最小点最大是多少。

每次加边 \(O(n^2)\) 转移然后更新答案,时间复杂度 \(O(n^2m)\)。

盯着这个 dp 怎么看都优化不动。

考虑常见套路:算贡献(对于这个题来说如果不熟练想到算贡献没那么容易)。对于 \(u\rightarrow v\) 的一条路径,在这条路径上所有点都没有在之前被删掉的情况下,我们希望这条路径上经过所有边的最小编号尽量大。这样它被删除的时间就会尽量晚,造成贡献的图会尽量多。

于是改变状态:\(f_{u,v}\) 表示 \(u\) 走到 \(v\) 所经过的边的编号最小值最大是多少(前提是这条路径在之前没被删掉)。

然后直接 floyd 转移。

复杂度 \(O(n^3)\)。

#include <cstdio>

inline int min(const int x, const int y) {return x < y ? x : y;} 
inline int max(const int x, const int y) {return x > y ? x : y;} 
int dp[1005][1005], ans[200005];

int main() {
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++ i) dp[i][i] = m + 1;
	for (int i = 1, u, v; i <= m; ++ i) scanf("%d%d", &u, &v), dp[u][v] = i;
	for (int k = n; k; -- k) {
		for (int i = 1; i < k; ++ i)
		for (int j = i + 1; j <= n; ++ j)
			dp[i][j] = max(dp[i][j], min(dp[i][k], dp[k][j]));
		for (int i = 1; i <= n; ++ i)
		for (int j = 1; j < k && j < i; ++ j)
			dp[i][j] = max(dp[i][j], min(dp[i][k], dp[k][j]));
	}
	for (int i = 1; i <= n; ++ i)
	for (int j = i; j <= n; ++ j)
		if (dp[i][j] && dp[j][i]) ++ ans[min(dp[i][j], dp[j][i]) - 1];
	for (int i = m; i >= 0; -- i) ans[i] += ans[i + 1];
	for (int i = 0; i <= m; ++ i) printf("%d ", ans[i]);
	return 0;
}

标签:const,函数,省选,路径,int,2021,ans,编号,dp
From: https://www.cnblogs.com/stinger/p/16613558.html

相关文章

  • STL next_permutation与prev_permutation函数
    刷剑指offer遇到元素排列问题No27字符串的排列函数使用题目描述:输入一个长度为n字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如......
  • js实现 find 函数
    //arr:要查找的数组,predict:要查找的key字符串或[key,value]数组,或对象{key,value},fromIndex:要从数组中第一个元素开始查,默认为0functionfind(arr,predict,......
  • Clickhouse windowFunnel函数使用
    --官方文档https://clickhouse.com/docs/zh/sql-reference/aggregate-functions/parametric-functions/#function-sequencecount对于事件进行连续跟踪分析能力,适用漏斗......
  • js实现 chunk 函数分组数组
    //自己实现functionchunk(list,size){letlen=list.length;if(size<1||!len){return[];}if(size>len){return[......
  • [GFCTF 2021]文件查看器
    www.zip下载源码看源码传入两个参数c和m,然后创建新的c类,执行c类的m函数没有的类通过autoload调用,限定目录和后缀默认给三个类能调用,看主要的file类有一个getfile函......
  • 解决github推送错误 remote: Support for password authentication was removed on Au
    推送github仓库代码,输入完账号密码出现:remote:SupportforpasswordauthenticationwasremovedonAugust13,2021.remote:Pleaseseehttps://docs.github.com/en/......
  • Python-09_01函数参数的传递
    参数传递:在Python中,类型属于对象,变量是没有类型的:如Str=‘hello’;Str=50,在以上代码中,hello是string类型的,50是整型,而变量Str是没有类型的,它仅仅是一个对象的引用(指针),......
  • Python-09_02函数参数类型、函数嵌套
    1、Python函数参数类型:必备参数、关键字参数、缺省参数、任意个数参数。必备参数须以正确的顺序传入函数,也叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,......
  • 虚函数与虚表浅分析
    虚函数以及虚函数表的特征:1.虚函数表是全局共享的元素,即全局仅有一个.2.虚函数表类似一个数组,类对象中存储vptr指针,指向虚函数表.即虚函数表不是函数,不是程序代码,......
  • JQuery事件绑定&入门函数&样式控制、JQuery_选择器_基本选择器
    JQuery事件绑定&入门函数&样式控制选择器:筛选具有相似的特征的元素(标签)基本语法学习:1事件的绑定2入口函数3样式控制window.on......