2019秦皇岛补题

Posted hh13579

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019秦皇岛补题相关的知识,希望对你有一定的参考价值。

F题

链接:https://codeforces.com/gym/102361/problem/F
思路 如果环的边长为k,那么环的删边方案数是2k-1。如果链的边长为k,那么链的删边方案数是2k。环的方案数乘以链的方案数就是总的方案数
(之前没关同步T了。。。)
代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring> 
using namespace std;
const int maxn=3e5+10;
const int mod=998244353;
#define ll long long 
int n,m,cnt,tot;
ll ans;
vector<int>G[maxn];
int vis[maxn],deep[maxn];
ll power(ll a,ll b)
{
    ll ans=1,x=a;
    for(;b;b>>=1)
    {
        if(b&1)
        {
            ans=ans*x%mod;
        }
        x=x*x%mod;
    }
    return ans;
}
void dfs(int u,int fa)
{   
    deep[u]=deep[fa]+1;
    for(int i=0;i<G[u].size();i++)
    {
        if(G[u][i]!=fa)
        {
            if(!vis[G[u][i]])
            {
                vis[G[u][i]]=1;
                dfs(G[u][i],u);
            }
            else if(deep[G[u][i]]<deep[u])
            {
                int x=deep[u]-deep[G[u][i]]+1;
                tot-=x;
                ans=ans*(power(2,x)-1)%mod;
            }
        }
        
    }
}
int main()
{
        int u,v;    
        ios::sync_with_stdio(false);
        cin>>n>>m;
        ans=1,tot=m;
        for(int i=1;i<=m;i++)
        {
            int u,v;
            cin>>u>>v;
            G[u].push_back(v);
            G[v].push_back(u); 
        }
        for(int i=1;i<=n;i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                dfs(i,i);
            }
        }
        ans=ans*power(2,tot)%mod;
        cout<<ans<<"
";
    
    return 0;
}

以上是关于2019秦皇岛补题的主要内容,如果未能解决你的问题,请参考以下文章

2019-ccpc秦皇岛现场赛

秦皇岛站2019CCPC A.Angel Beats

2019秦皇岛CCPC旅游小结

[CCPC2019秦皇岛] E. Escape

日常训练ACM2019-10-27_ccpc2019秦皇岛

[CCPC2019秦皇岛] F. Forest Program