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 |
|
|
| 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 |