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;
    }
    
  • 相关阅读:
    启动Tomcat报错:严重: Exception starting filter struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    数学 交换律
    android中LayoutInflater的使用
    数学 三角函数
    数学 矩阵
    数学 弧度
    数学 分配律
    Android开发必备的免费资源和工具
    数学 结合律
    View.setTag()的作用
  • 原文地址:https://www.cnblogs.com/Livingston/p/15569442.html
Copyright © 2011-2022 走看看