• Educational Codeforces Round 56 D


    ​题目大意:

    在给定的一个图中(可能不连通) 

    给每个点赋值1、2、3 使得一条边上的两个端点点权相加为奇数

    求方案数

    一条满足条件的路径上的点权必为一奇一偶交替

    偶数只有2 奇数有1、3

    若位于1、3、5、.... 的点有x1个 位于2、4、6、... 的点有x0个

    那么一条路径的方案数为 2^x1+2^x0 (x1的点作为奇数点的方案+x0的点作为奇数点的方案)

    当图不连通 存在多个子图 那么每个子图的方案数相乘 就是总的方案数

    当图中存在环时 若环上的点数为偶数则同样满足上式 但为奇数则整条路径不可能有解

    #include <bits/stdc++.h>
    #define LL long long
    #define mod 998244353
    using namespace std;
    int n,m;
    const int N=3e5+5;
    vector <int> e[N];
    bool vis[N], NO;
    int col[N], m0, m1;
    LL p[N];
    void init() {
        p[0]=1LL;
        for(int i=1;i<N;i++)
            p[i]=p[i-1]*2LL%mod;
    }
    void dfs(int u,int c) {
        if(NO) return;
        col[u]=c;
        if(col[u]) m1++;
        else m0++;
        for(int i=0;i<e[u].size();i++) {
            int v=e[u][i];
            if(col[v]==-1) dfs(v,c^1);
            else if(col[v]==col[u]) {
                NO=1; return; // 环上的点数为奇数个
            }
        }
    }
    int main()
    {
        init();
        int t; scanf("%d",&t);
        while(t--) {
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++) 
                e[i].clear(), col[i]=-1;
            for(int i=0;i<m;i++) {
                int u,v; scanf("%d%d",&u,&v);
                e[u].push_back(v), e[v].push_back(u);
            } 
            LL ans=1LL; NO=0;
            for(int i=1;i<=n;i++)
                if(col[i]==-1) {
                    m0=m1=0; dfs(i,0);
                    if(NO) break;
                    ans=(p[m0]+p[m1])%mod*ans%mod;
                }
            if(NO) printf("0
    ");
            else printf("%I64d
    ",ans);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    [codevs 1227] 方格取数 2
    记冬令营
    Codeforces Round 558(Div 2)题解
    Educational Round 64 题解
    [GXOI/GZOI2019]与或和(位运算,单调栈)
    LOJ6053 简单的函数(min_25筛)
    LOJ6235 区间素数个数(min_25筛)
    min_25筛学习笔记
    CF1142C U2(计算几何,凸包)
    关于一些没做出来的SBCF题
  • 原文地址:https://www.cnblogs.com/zquzjx/p/10129856.html
Copyright © 2020-2023  润新知