[CCPC2019秦皇岛] F. Forest Program

[CCPC2019秦皇岛 F]

Link

https://codeforces.com/gym/102361/problem/F

Description

给定一个仙人掌,删去一些边可以让它变成一个森林(一棵树也是森林),求方案数。 \(n \le 300000, m \le 500000\)

Solution

用 DFS 暴力找环,然后乘法原理算一下即可。注意非环边也会有贡献。

DFS 可以模仿 Tarjan 算法写。

Code
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 300005;
const int modulo = 998244353;
vector <int> g[N];
int is[N],dis[N];
int n,m,t1,t2,t3,t4;
vector <int> sta,cir;

int qpow(int p,int q)
{
    int r=1;
    for(;q;p*=p,p%=modulo,q>>=1) if(q&1) r*=p,r%=modulo;
    return r;
}

void dfs(int p,int dep)
{
    is[p]=2;
    dis[p]=dep;
    sta.push_back(p);
    for(int i=0;i<g[p].size();i++)
    {
        int q=g[p][i];
        if(is[q]==2 && dep-dis[q]>1)
        {
            cir.push_back(dep+1-dis[q]);
        }
        else if(is[q]==0)
        {
            dfs(q,dep+1);
        }
    }
    sta.pop_back();
    is[p]=1;
}

signed main()
{
    scanf("%I64d%I64d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%I64d%I64d",&t1,&t2);
        g[t1].push_back(t2);
        g[t2].push_back(t1);
    }
    for(int i=1;i<=n;i++)
    {
        if(is[i]==0)
        {
            dfs(i,1);
        }
    }
    int sum=0,ans=1;
    for(int i=0;i<cir.size();i++)
    {
        ans*=(qpow(2ll,cir[i])-1ll);
        ans%=modulo;
        ans+=modulo;
        ans%=modulo;
        sum+=cir[i];
    }
    ans*=qpow(2ll,m-sum);
    ans%=modulo;
    printf("%I64d\n",ans);
}

原文地址:https://www.cnblogs.com/mollnn/p/11730147.html

时间: 2024-10-30 07:38:11

[CCPC2019秦皇岛] F. Forest Program的相关文章

2019 CCPC秦皇岛 F Forest Program

关键在于怎样找到各个环及其边数. dfs搜 双连通分量 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef pair<int,int> piir; 4 typedef long long ll; 5 const int maxn = 3e5+5; 6 const int maxm = 5e5+5; 7 const int INF = 0x3f3f3f3f; 8 const int mod = 998244353; 9

[CCPC2019秦皇岛] E. Escape

[CCPC2019秦皇岛E] Escape Link https://codeforces.com/gym/102361/problem/E Solution 观察到性质若干然后建图跑最大流即可. 我的 ISAP 被卡了,换成 Dinic 却过了. #include <bits/stdc++.h> using namespace std; const int maxn = 200005; const int inf = 1e+9; #define reset(x) memset(x,0,siz

Forest Program(2019ccpc秦皇岛F)

题:http://acm.hdu.edu.cn/showproblem.php?pid=6736 题意:删掉一些边使得图不存在点双,求方案数. 分析:若一条边不属于点双,那么这条边有删和不删俩种选择,若找到点双,点双中必须删掉一条边(题目有保证一条边只能属于一个点双,所以不用担心一条边用于多个点双)tarjan找点双,若为点双则必须删掉点双中的一条边 #include<bits/stdc++.h> using namespace std; typedef long long ll; #defi

Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解

题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角三角形. 分析:这是一篇鸽了很久的题解,主要原因就是现场赛的时候这题惨遭卡常,锅++.现在回过头来想这题,主要问题出在现场赛时误判了\(map\)的时间复杂度,把极角排序的正确想法成功叉掉,以及现场赛时候的共线计数使用了\(gcd\),使得整体复杂度上升.(但还是有大佬拿gcd思想过了,我太菜了)现

2019-ccpc秦皇岛现场赛

https://www.cnblogs.com/31415926535x/p/11625462.html 昨天和队友模拟了下今年秦皇岛的区域赛,,,(我全程在演 题目链接 D - Decimal 签到题,,,(感觉在cf上做过,, (然后写反输出白白wa一发,,,,,emmmmmmmm F - Forest Program 这题我感觉是第二道签到题,,,很简单,,但是我一个人读完题后就想着怎么写代码,,,然后wa了无数发才反应过来还要考虑树边的情况,,,丧失理智 ,,,, 题意就是给一个 仙人掌

【日常训练】【ACM】2019-10-27_ccpc2019秦皇岛

A: Angle Beats 我们写掉了,但是不是我写的,是pcf写的.他卡了好久常数,所以我就不写题解了 D: Decimal 题面 每次给你一个正整数\(n\),问\(\frac{1}{n}\)在十进制下是否是无限小数. 题解 如果\(n\)只有2或者5作为质因子,那么就不是,否则就是. 这题很傻. E: Escape 这题有点意思. 网络流 题面 给你一个\(n\times m\)的网格,有些格子可能有障碍. 在第\(1\)行上面放了若干个机器人,第\(i\)个在\((0,p_i)\).

2019CCPC秦皇岛赛区

目录 Solutions F. Forest Program I. Invoker J. MUV LUV EXTRA Link Solutions F. Forest Program 题意: 思路: dfs+栈 判环 设图中环的大小分别为 \(c_1\) \(c_2\), ..., \(c_k\),不属于任何一个环的边数为 \(b\),则答案为: \(2^b*\prod _{i=1}^{k}{(2^{c_i}-1)}\) dfs 判环时 各点入栈 若点已存在于栈中 则存在环 计算环大小即可 不必

2019 China Collegiate Programming Contest Qinhuangdao Onsite

目录 Contest Info Solutions A. Angle Beats D. Decimal F. Forest Program I. Invoker J. MUV LUV EXTRA Contest Info Practice Link Solved A B C D E F G H I J K L 5/12 O - - O - O - - - O ? - O 在比赛中通过 ? 赛后通过 ! 尝试了但是失败了 - 没有尝试 Solutions A. Angle Beats 题意: 给出

系统相关命令

Linux 系统状态的查看及管理工具: pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup pstree pstree - display a tree of processes pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ][ -A | -G | -U ] [