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

题目描述

对于一张 n 个点 m 条边的有向图 G(顶点从 1∼n 编号),定义函数 f(u,G):

  1. 初始化返回值 cnt=0,图 G′=G。
  2. 从 1 至 n 按顺序枚举顶点 v,如果当前的图 G′ 中,从 u 到 v 与从 v 到 u 的路径都存在,则将 cnt+1,并在图 G′ 中删去顶点 v 以及与它相关的边。
  3. 第 2 步结束后,返回值 cnt 即为函数值。

现在给定一张有向图 G,请你求出 h(G)=f(1,G)+f(2,G)+⋯+f(n,G) 的值。

更进一步地,记删除(按输入顺序给出的)第 1 到 i 条边后的图为 Gi​(1≤i≤m),请你求出所有 h(Gi​) 的值。

输入格式

第一行,两个整数 n,m,表示图的点数与边数。

接下来 m 行,每行两个整数,第 i 行的两个整数 xi​,yi​ 表示一条有向边 xi​→yi​。

数据保证 xi​=yi​ 且同一条边不会给出多次。

输出格式

输出一行 m+1 个整数,其中第一个数表示给出的完整图 G 的 h(G) 值。第 i(2≤i≤m+1)个整数表示 h(Gi−1​)。

输入输出样例

输入 #1复制

复制代码
4 6
2 3
3 2
4 1
1 4
2 1
3 1

输出 #1复制

复制代码
6 5 5 4 4 4 4

输入 #2复制

复制代码
见附件中的 graph/graph2.in。

输出 #2复制

复制代码
见附件中的 graph/graph2.ans。

说明/提示

【样例 #1 解释】

对于给出的完整图 G:

  1. f(1,G)=1,过程中删除了顶点 1。
  2. f(2,G)=1,过程中删除了顶点 2。
  3. f(3,G)=2,过程中删除了顶点 2,3。
  4. f(4,G)=2,过程中删除了顶点 1,4。

【数据范围】

对于所有测试数据:2≤n≤103,1≤m≤2×105,1≤xi​,yi​≤n。

每个测试点的具体限制见下表:

测试点编号 n≤ m≤
1∼4 10 10
5∼11 100 2×103
12∼20 103 5×103
21∼25 103 2×105

附件下载

graph.zip3.51KB

代码实现:

复制代码
#include<stdio.h>
const int N=1005,M=200005;  
int n,m;
int g[N][N],s[M],a[M];      
inline int min(int a,int b){
    return a<b? a:b;
}
inline int max(int a,int b){
    return a>b? a:b;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        g[i][i]=m+1;
    for(int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        g[x][y]=i;
    }
    for(int k=n;k>=1;k--){
        for(int i=k;i<=n;i++)
            s[min(g[i][k],g[k][i])]++;
        for(int i=1;i<=k;i++)
            if(g[i][k])
                for(int j=1;j<=n;j++)
                    g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));
        for(int i=k+1;i<=n;i++)
            if(g[i][k])
                for(int j=1;j<k;j++)
                    g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));
    }
    for(int i=m;i>=1;i--)
        s[i]+=s[i+1];
    for(int i=1;i<=m+1;i++)
        printf("%d%c",s[i],i==m+1? '\n':' ');
    return 0;
}
相关推荐
INGNIGHT19 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805419 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山20 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds20 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183120 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx21 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791321 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐1 天前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归
charliejohn1 天前
计算机考研 408 数据结构 堆的插入与删除 堆排序
算法
老鱼说AI1 天前
从点积到希尔伯特空间:向量内积的几何本质与大模型相似度度量
人工智能·深度学习·线性代数·算法·机器学习·数学建模