《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;
}
相关推荐
wabs66612 分钟前
关于图论【广度优先搜索的理论基础】
算法·图论·宽度优先
孤魂23316 分钟前
逻辑回归算法
算法·机器学习·逻辑回归
weixin_3776348420 分钟前
【多模型预测】 如何合理融合多个预测分值
算法·机器学习·概率论·预测·agent预测
无风听海26 分钟前
Claude Agent Skills 的四种设计模式;从渐进式披露到最小权限
java·算法·设计模式
37.2℃99543 分钟前
专业的Claude Design解决方案
前端·算法
め.1 小时前
定点数运算库
算法·unity
dyxal1 小时前
最长公共子序列(LCS)
python·算法
稚南城才子,乌衣巷风流3 小时前
ST 表(Sparse Table)算法详解:原理、实现与应用
算法
hold?fish:palm3 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Sw1zzle4 小时前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法