zoukankan      html  css  js  c++  java
  • 7391. 【2021.11.17NOIP提高组联考】图

    Description

    给定 \(n\) 个点 \(m\) 条边的无向图(不保证联通)。

    每次操作随机删去一个点,如果一个点连向的所有点都被删掉了,那么这个点也会消失。

    求期望多少次操作能把这个图删空。答案对 \(998244353\) 取模。

    \(n\le 10^5,m\le 2\times 10^5\)

    Solution

    直接上结论,若节点 \(i\) 的入度为 \(d_i\),答案为 \(\sum_{i=1}^n\frac{d_i}{d_i+1}\)

    证明的话也非常的简单,我们思考每一个点在所有情况中我们主动删去它的概率,当且仅当这个点的所有连向的点都被删掉且该点还没有被删掉的时候,这个点不是被我们主动删掉的,也就是我们考虑的这个点是 \(d_{i}+1\) 个点中最后一个被删掉的点,(注意因为中间的点没有被删掉,所以此时它周围的点都是不可能因为周围没有点而被删掉的),所以这个点就有 \(\frac{d_{i}}{d_{i}+1}\) 概率被主动删掉。

    Code

    #include<cstdio>
    #define N 100005
    #define mod 998244353
    using namespace std;
    int n,m,x,y,du[N];
    long long ans,ni[N];
    int main()
    {
    	freopen("graph.in","r",stdin);
    	freopen("graph.out","w",stdout);
    	scanf("%d%d",&n,&m);
    	ni[0]=ni[1]=1;
    	for (int i=2;i<=n;++i)
    		ni[i]=ni[i]=(long long)(mod-mod/i)*ni[mod%i]%mod;
    	for (int i=1;i<=m;++i)
    		scanf("%d%d",&x,&y),++du[x],++du[y];
    	for (int i=1;i<=n;++i)
    		ans=(ans+du[i]*ni[du[i]+1]%mod)%mod;
    	printf("%lld\n",ans);
    	return 0;
    }
    
  • 相关阅读:
    burpsuite 关于部分https抓包失败原因
    记一次对汉明科技无线运营系统审计的过程
    nmap script 总结
    python argparse总结
    unix 密码破解,zip破解总结
    python 反向shell后门
    结构体的不完整声明
    [转载][来自csdn]RTS和CTS是什么意思?
    博客开通成功
    system系统调用返回值判断命令是否执行成功
  • 原文地址:https://www.cnblogs.com/Livingston/p/15569442.html
Copyright © 2011-2022 走看看