Submission #37411837


Source Code Expand

#include<bits/stdc++.h>
#define LL long long
#define MOD 998244353
int mul(const int &a, const int &b)
{
    return 1LL * a * b % MOD;
}
void Inc(int &a, const int &b)
{
    ((a += b) >= MOD) && (a -= MOD);
}
void Mul(int &a, const int &b)
{
    a = 1LL * a * b % MOD;
}
void Sqr(int &a)
{
    a = 1LL * a * a % MOD;
}
int qwqmi(int x, int k = MOD - 2)
{
    int res = 1;
    while(k)
    {
        if(k & 1) Mul(res, x);
        Sqr(x), k >>= 1;
    }
    return res;
}
using namespace std;
const int N = 5e3 + 5;
int two[N], fac[N], facinv[N];
void preprocess()
{
    two[0] = 1;
    for(int i = 1; i < N; ++i)
        two[i] = mul(two[i - 1], 2);
    fac[0] = facinv[0] = 1;
    for(int i = 1; i < N; ++i)
        fac[i] = mul(fac[i - 1], i);
    facinv[N - 1] = qwqmi(fac[N - 1]);
    for(int i = N - 2; i >= 1; --i)
        facinv[i] = mul(facinv[i + 1], i + 1);
}
int C(int n, int m)
{
    if(n < m) return 0;
    return mul(fac[n], mul(facinv[m], facinv[n - m]));
}
int n, m;
int p[N];
int sze[N], szv[N];
int bcnt;
int f[N][N];
int find(int x)
{
    if(x != p[x])
        p[x] = find(p[x]);
    return p[x];
}
void merge(int x, int y)
{
    x = find(x), y = find(y);
    if(x != y)
    {
        szv[x] += szv[y];
        sze[x] += sze[y];
        p[y] = x;
    }
    sze[x]++;
}
int main()
{
    preprocess();
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= n; ++i)
    {
        p[i] = i;
        szv[i] = 1;
    }
    for(int i = 1; i <= m; ++i)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        merge(a, b);
    }
    f[0][0] = 1;
    for(int i = 1; i <= n; ++i)
        if(p[i] == i)
        {
            ++bcnt;
            for(int j = 0; j <= n; ++j)
                for(int k = 0; k <= min(j, szv[i]); k += 2)
                    Inc(f[bcnt][j], mul(C(szv[i], k), mul(two[sze[i] - szv[i] + 1], f[bcnt - 1][j - k])));
        }
    for(int i = 0; i <= n; ++i)
        printf("%d\n", f[bcnt][i]);
    return 0;
}

Submission Info

Submission Time
Task D - Odd Degree
User Schucking_Sattin
Language C++ (GCC 9.2.1)
Score 600
Code Size 2043 Byte
Status AC
Exec Time 269 ms
Memory 101580 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:75:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   75 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
./Main.cpp:84:14: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   84 |         scanf("%d %d", &a, &b);
      |         ~~~~~^~~~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 26
Set Name Test Cases
Sample sample00, sample01
All case02, case03, case04, case05, case06, case07, case08, case09, case10, case11, case12, case13, case14, case15, case16, case17, case18, case19, case20, case21, case22, case23, case24, case25, sample00, sample01
Case Name Status Exec Time Memory
case02 AC 8 ms 3684 KiB
case03 AC 3 ms 3728 KiB
case04 AC 94 ms 20252 KiB
case05 AC 94 ms 20192 KiB
case06 AC 263 ms 100888 KiB
case07 AC 16 ms 4120 KiB
case08 AC 3 ms 4120 KiB
case09 AC 4 ms 3780 KiB
case10 AC 269 ms 100344 KiB
case11 AC 3 ms 4232 KiB
case12 AC 2 ms 3784 KiB
case13 AC 95 ms 20020 KiB
case14 AC 92 ms 19468 KiB
case15 AC 95 ms 19692 KiB
case16 AC 2 ms 3768 KiB
case17 AC 2 ms 3644 KiB
case18 AC 2 ms 3832 KiB
case19 AC 269 ms 101580 KiB
case20 AC 3 ms 3784 KiB
case21 AC 4 ms 3712 KiB
case22 AC 4 ms 3712 KiB
case23 AC 2 ms 3884 KiB
case24 AC 2 ms 3656 KiB
case25 AC 4 ms 3768 KiB
sample00 AC 2 ms 3644 KiB
sample01 AC 2 ms 3700 KiB