P7516 [省选联考 2021 A/B 卷] 图函数

解析

纯纯的人类智慧题。

关键性质:vvv 可以在计算 f(u,G)f(u,G)f(u,G) 时产生贡献,当且仅当 GGGu,vu,vu,v 之间可以通过 [v,n][v,n][v,n] 的点互相到达。
充分性较为显然,编号更大的点不会比 vvv 先删去,所以必然在 vvv 时刻依然存在。
必要性证明:假设 vvv 时刻 u→vu\to vuv 的路径上存在一个 x∈[1,v)x\in [1,v)x[1,v),在 xxx 时刻图的联通性不弱于 vvv 时刻,因而必然也有 u→xu\to xux 可达,且由于 x→v,v→ux\to v,v\to uxv,vu 皆可达,也就有 x→ux\to uxu 可达,xxx 应当被删去,矛盾。

接下来的任务就是如何维护这个东西。

floyd

对于点编号属于 [v,n][v,n][v,n] 这样的限制,不难想到 floyd。但是直接跑无法通过 n=1000n=1000n=1000
然后拿大样例试了试,发现写成:

for(int k=n;k>=1;k--){for(int i=1;i<=k;i++){for(int j=i;j<=n;j++){k -> update(i,j)}}}

答案依然是对的,并且能跑过1000了。
然后就完事了。

我们当然要想一想为什么这样是对的。
这么转移必然出问题的就是两边的点编号均大于 kkk 的情况。
如图中的 p,qp,qp,q
(高度表示点编号的相对大小)
请添加图片描述

那么我们现在就要证明:

(x,y)(x,y)(x,y) 路径上没有经过 [1,min⁡(x,y))[1,\min(x,y))[1,min(x,y)) 的点,就必然可以正确转移。

假设枚举到中转点 kkk 之前的路径都符合这个性质。
对于当前枚举的中转点 kkk,注意到我们需要求出的合法路径必然至少有一个端点是小于 kkk 的。
那么就必然能在 kkk 的某一侧找到第一个编号小于 kkk 的点 xxxk→xk\to xkx 这段路径使用 (k,n](k,n](k,n] 的点中转,不会出现现在 p,qp,qp,q 这样的窘境,所以 f(k,x)f(k,x)f(k,x) 当前是对的。
那么 xxx 就可以通过 kkk 连接起另一侧的 ppp ,得到正确的 f(p,x)f(p,x)f(p,x)
如果 (u,p)(u,p)(u,p) 之间有 k′k'k 这样的点导致 f(u,p)f(u,p)f(u,p) 不对怎么办?把(u,p)(u,p)(u,p) 最小的点 k′k'k 当成 ppp 的角色来考虑,刚才的证明就还是对的。

bfs

本题看题解,还有通过 bfs 求对每个 vvv 考虑在每张图中能对多少 uuu 产生贡献的方法来做的,每次 bfs 用到一条边就直接删去,从而保证复杂度为 O(nm)O(nm)O(nm),也挺妙的。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
using namespace std;const int N=1050;
const int M=2e5+100;
const int inf=1e9;
const int mod=19921228;inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m;
int f[N][N];
ll sum[M];signed main() {
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endif//memset(f,0x3f,sizeof(f));n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read();f[x][y]=i;}for(int i=1;i<=n;i++) f[i][i]=m+1;for(int k=n;k>=1;k--){for(int i=k;i<=n;i++) sum[min(f[i][k],f[k][i])]++;for(int i=1;i<=k;i++){//if(!f[i][k]&&!f[k][i]) continue;for(int j=i;j<=n;j++){f[i][j]=max(f[i][j],min(f[i][k],f[k][j]));f[j][i]=max(f[j][i],min(f[j][k],f[k][i]));}}}for(int i=m;i>=1;i--) sum[i]+=sum[i+1];for(int i=1;i<=m+1;i++) printf("%lld ",sum[i]);return 0;
}
/*
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发语言大爆炸的时代,究竟谁主沉浮?

开发语言大爆炸的时代&#xff0c;究竟谁主沉浮&#xff1f;当这个系列本来打算是写人物的&#xff0c;而且是写我们身边那些优秀的开发者&#xff0c;然而当第一篇文章&#xff0c;写的是关于我们长沙.NET社区的优秀开发者邹琼俊&#xff0c;发表在博客园之后&#xff0c;有一…

2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)

牛牛和数组操作descriptionsolutioncodedescription 【题目描述】 有n 2个整数a0, a1, . . . , an, an1&#xff0c; a0 an1 0。你需要做确切地n次操作&#xff0c;每次 操作为以下形式&#xff1a; 选择一个整数x满足ax ≠ 0&#xff0c;使得ax 0&#xff0c;令lmaxi<…

杜教BM模板(用于求线性递推公式第N项)

通过手动求出线性递推公式的前几项&#xff08;一般要前8项&#xff09;&#xff0c;杜教BM模板可以直接求第n项是多少。。我才知道&#xff0c;离谱。。对于我来说是妙计 //递推公式黑科技 #include<bits/stdc.h> using namespace std; ///#define X first //#define Y…

Asp.NETCore轻松学系列阅读指引目录

前言耗时两个多月&#xff0c;坚持写这个入门系列文章&#xff0c;就是想给后来者更好更快的上手体验&#xff0c;这个系列可以说是从入门到进阶&#xff0c;适合没有 .NETCore 编程经验到小白同学&#xff0c;也适合从 .NET Framework 迁移到 .NETCore 的朋友。本系列从安装环…

P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)

解析 给出 n,x,pn,x,pn,x,p 和一个 mmm 次的多项式 f(k)f(k)f(k)&#xff0c;求解&#xff1a; ∑k0nf(k)xk(nk)modp\sum_{k0}^nf(k)x^k\binom n k\mod pk0∑n​f(k)xk(kn​)modp 把多项式拆成若干个单项式&#xff0c;现在就是要求&#xff1a; ∑k0nkpxk(nk)\sum_{k0}^nk^px…

CF750G New Year and Binary Tree Paths(数位dp二进制+数学)

CF750G New Year and Binary Tree Pathsdescriptionsolutioncodedescription 题目链接 一颗无穷个节点的完全二叉树。 求有多少条树上的简单路径编号和为 s。 s≤1e15s\le 1e15s≤1e15 solution 一条单链的情况 考虑从节点xxx开始走一条节点个数是hhh的链&#xff08;链长为…

eShopOnContainers 知多少[9]:Ocelot gateways

引言客户端与微服务的通信问题永远是一个绕不开的问题&#xff0c;对于小型微服务应用&#xff0c;客户端与微服务可以使用直连的方式进行通信&#xff0c;但对于对于大型的微服务应用我们将不得不面对以下问题&#xff1a;如何降低客户端到后台的请求数量&#xff0c;并减少与…

Acwing 1072. 树的最长路径

Acwing 1072. 树的最长路径 题意&#xff1a; 每个边有权值&#xff0c;求树的直径 题解&#xff1a; 两遍dfs可以求&#xff0c;这里用树形dp的方法&#xff0c;我们将1作为根节点来看这棵树 我们可以将点看作是钉子&#xff0c;边就是挂在钉子上的绳子&#xff0c;我们只…

模板:矩阵树定理

文章目录前言解析无向图有向图根向树叶向树code带权图code所谓矩阵树定理&#xff0c;就是用矩阵解决树问题的定理。 &#xff08;逃&#xff09; 前言 神奇科技。 之前一直没有写博客&#xff0c;觉得还是写一发比较好。 证明什么的是不可能会的 背下来背下来&#xff01; …

P2016 战略游戏

P2016 战略游戏 题意&#xff1a; 他要建立一个古城堡&#xff0c;城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵&#xff0c;使得这些士兵能了望到所有的路。 注意&#xff0c;某个士兵在一个结点上时&#xff0c;与该结点相连的所有边将都可以被了望…

.NET/C# 获取一个正在运行的进程的命令行参数

在自己的进程内部&#xff0c;我们可以通过 Main 函数传入的参数&#xff0c;也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。但是&#xff0c;可以通过什么方式来获取另一个运行着的程序的命令行参数呢&#xff1f;进程内部获取传入参数的方法&#xff0c;可以…

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界(并查集+第二分块)

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界descriptionsolutioncodedescription 五彩斑斓的世界 CF896E Welcome home,Chtholly 五彩斑斓的世界是加强版&#xff0c;所以下面的题解部分是写的加强版 solution 第二分块 查询操作中把>x>x>x的数全都…

Defuse the Bombs Gym - 102822D

Defuse the Bombs Gym - 102822D 题目&#xff1a; 给你n个数&#xff0c;现在每轮会有三个操作&#xff1a; 1.选择一个数&#xff0c;使他加一 2.所有数减一 3.当有一个数变成负数时结束操作&#xff0c;否则回到第一步 问最多能进行几次第一步&#xff1f; 题解&#xff…

P4364 [九省联考 2018] IIIDX(线段树、贪心)

解析 感觉不至于黑的题。 然而我并不会做 did_idi​ 互不相同的时候直接无脑贪心即可&#xff0c;这样55分的好成绩就到手了。&#xff08;交完发现可以骗到60&#xff09; 滚榜级的良心分了属于是。 考虑有相同时如何做。 先把值降序排序&#xff0c;然后维护一棵线段树&…

CF1491H Yuezheng Ling and Dynamic Tree(分块)

CF1491H Yuezheng Ling and Dynamic Treedescriptionsolutioncodedescription 题目链接 solution 非常清新的小分块题了 前提&#xff1a;将序列分成n\sqrt{n}n​块&#xff0c;每块有n\sqrt{n}n​个数&#xff0c;记第iii个块的左右边界为Li,RiL_i,R_iLi​,Ri​&#xff0…

听说,霸都.NET技术社区准备搞线下聚会了?

.NET Core实战项目交流群日常交流嗨&#xff0c;你听说了没有&#xff1f;霸都.NET技术社区准备搞线下聚会了&#xff01;啥时候的事情啊&#xff1f;最近才知道的消息啊&#xff01;那你是从哪里知道的消息呢&#xff1f;.NET Core项目实战交流群&#xff08;637326624&#x…

Knowledge is Power Gym - 102822K

Knowledge is Power Gym - 102822K 题意&#xff1a; 给你一个数n&#xff0c;让你将n分解成一些互质的数&#xff0c;然后这些数的最大值减最小值要求最小&#xff0c;如果不行输出-1&#xff0c;否则输出最大值减最小值的最小情况 题解&#xff1a; 具体做法是通过枚举大…

P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)

解析 它还真的不难。 乐。 这题没做出来有些谔谔。 外层wqs二分显而易见&#xff0c;里面不知道为啥我总觉得这个题可以贪心。 然后一直试图在原树直径上下功夫&#xff0c;一筹莫展。 看到题解“dp”两个字这题也就做完了… 就相当于要把一棵树分成若干条无交链&#xff0c;每…

ASP.NET Core中实现单体程序的事件发布/订阅 - LamondLu - 博客园

标题&#xff1a;ASP.NET Core中实现单体程序的事件发布/订阅作者&#xff1a;Lamond Lu地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10468058.html项目源代码&#xff1a;https://github.com/lamondlu/EventHandlerInSingleApplication背景事件发布/订阅是一种非常强大…

CF1592E Bored Bakry(二进制+前缀异或和)

CF1592E Bored Bakrydescriptionsolutioncodedescription 题目链接 solution and\text{and}and如果第iii位为111&#xff0c;意味着区间内每个数的第iii位都是111 xor\text{xor}xor如果第iii位为111&#xff0c;意味着区间内有奇数个第iii位为111 这种涉及二进制操作的一般都…