QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#67498 | #247. 州区划分 | alpha1022 | 100 ✓ | 5104ms | 371704kb | C++23 | 3.5kb | 2022-12-10 16:38:25 | 2022-12-10 16:38:26 |
Judging History
answer
#include <cstdio>
#include <vector>
#include <cstring>
#define lowbit(x) ((x) & -(x))
#define add(x,y) (x + y >= mod ? x + y - mod : x + y)
#define dec(x,y) (x < y ? x - y + mod : x - y)
using namespace std;
const int BUFF_SIZE = 1 << 20;
char BUFF[BUFF_SIZE],*BB,*BE;
#define gc() (BB == BE ? (BE = (BB = BUFF) + fread(BUFF,1,BUFF_SIZE,stdin),BB == BE ? EOF : *BB++) : *BB++)
template<class T>
inline void read(T &x)
{
x = 0;
char ch = 0,w = 0;
for(;ch < '0' || ch > '9';w |= ch == '-',ch = gc());
for(;ch >= '0' && ch <= '9';x = (x << 3) + (x << 1) + (ch ^ '0'),ch = gc());
w && (x = -x);
}
const int S = 1 << 21;
const int M = 210;
const int N = 21;
const int mod = 998244353;
inline int fpow(int a,int b)
{
int ret = 1;
for(;b;b >>= 1)
(b & 1) && (ret = (long long)ret * a % mod),a = (long long)a * a % mod;
return ret;
}
int n,m,s,p;
vector<int> e[N + 5];
int vis[N + 5],deg[N + 5],q[N + 5],head,tail;
inline void bfs(int s,int t)
{
memset(vis,0,sizeof vis),head = tail = 0;
vis[q[++tail] = t] = 1;
for(register int p;head < tail;)
{
p = q[++head];
for(register vector<int>::iterator it = e[p].begin();it != e[p].end();++it)
if(!vis[*it] && (s & (1 << *it)))
vis[*it] = 1,q[++tail] = *it;
}
}
int sum[S + 5];
int f[N + 5][S + 5],g[N + 5][S + 5];
inline void fwt(int *a,int type,int n)
{
for(register int w = 2,m = 1;w <= n;w <<= 1,m <<= 1)
for(register int i = 0;i < n;i += w)
for(register int j = 0;j < m;++j)
a[i | j | m] = type == 1 ? add(a[i | j | m],a[i | j]) : dec(a[i | j | m],a[i | j]);
}
int main()
{
read(n),read(m),read(p),s = 1 << n;
int u,v;
for(register int i = 1;i <= m;++i)
read(u),read(v),--u,--v,e[u].push_back(v),e[v].push_back(u);
for(register int i = 0;i < n;++i)
read(sum[1 << i]);
for(register int i = 1,t,flag;i < s;++i)
{
sum[i] = sum[i ^ lowbit(i)] + sum[lowbit(i)],memset(deg,0,sizeof deg),flag = t = 0;
for(register int j = 0;j < n;++j)
if(i & (1 << j))
for(register vector<int>::iterator it = e[j].begin();it != e[j].end();++it)
if(i & (1 << *it))
++deg[*it];
for(register int j = 0;j < n;++j)
if(i & (1 << j))
{
!t && (t = j);
if(deg[j] & 1)
{
flag = 1;
break;
}
}
if(!flag)
{
bfs(i,t);
for(register int j = 0;j < n;++j)
if((i & (1 << j)) && !vis[j])
{
flag = 1;
break;
}
}
if(flag)
g[__builtin_popcount(i)][i] = fpow(sum[i],p);
}
for(register int i = 1;i < s;++i)
sum[i] = fpow(sum[i],mod - p - 1);
for(register int i = 0;i <= n;++i)
fwt(g[i],1,s);
f[0][0] = 1,fwt(f[0],1,s);
for(register int i = 1;i <= n;++i)
{
for(register int j = 1;j <= i;++j)
for(register int k = 0;k < s;++k)
f[i][k] = (f[i][k] + (long long)f[i - j][k] * g[j][k]) % mod;
fwt(f[i],-1,s);
for(register int j = 0;j < s;++j)
f[i][j] = (long long)f[i][j] * sum[j] % mod;
i < n && (fwt(f[i],1,s),1);
}
printf("%d\n",f[n][s - 1]);
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 26
Accepted
Test #1:
score: 26
Accepted
time: 3ms
memory: 3116kb
input:
5 4 2 3 1 4 1 5 1 4 3 94 45 77 43 3
output:
652834711
result:
ok 1 number(s): "652834711"
Test #2:
score: 0
Accepted
time: 3ms
memory: 3112kb
input:
10 34 2 1 2 5 1 6 1 1 8 1 9 1 10 3 2 2 6 7 2 2 8 9 2 10 2 3 4 3 5 3 6 3 8 9 3 10 3 4 5 6 4 8 4 9 4 10 4 5 8 9 5 10 5 7 6 6 8 6 10 8 7 9 7 10 7 8 9 10 9 89 50 53 95 71 52 83 54 54 12
output:
748246143
result:
ok 1 number(s): "748246143"
Test #3:
score: 0
Accepted
time: 33ms
memory: 7200kb
input:
15 81 0 1 4 6 1 1 7 1 8 1 9 10 1 1 13 14 1 1 15 2 3 4 2 5 2 6 2 2 7 2 8 2 11 12 2 13 2 14 2 2 15 4 3 5 3 3 7 3 8 3 9 10 3 11 3 3 13 14 3 15 3 4 5 6 4 4 7 4 8 9 4 11 4 4 12 13 4 14 4 15 4 6 5 8 5 5 9 5 10 5 11 5 12 6 7 8 6 9 6 10 6 11 6 6 12 6 14 8 7 7 9 7 10 7 11 7 12 13 7 7 14 7 15 8 10 8 11 8 12 1...
output:
318194083
result:
ok 1 number(s): "318194083"
Test #4:
score: 0
Accepted
time: 31ms
memory: 7312kb
input:
15 70 1 1 2 3 1 4 1 1 5 6 1 8 1 1 9 1 12 1 13 1 15 2 3 2 4 2 5 2 6 2 7 2 9 2 11 12 2 13 2 2 14 3 5 6 3 3 8 9 3 11 3 12 3 3 13 4 5 8 4 10 4 4 12 13 4 6 5 7 5 5 8 9 5 11 5 5 13 14 5 6 7 6 8 6 9 10 6 6 12 6 13 6 14 15 6 7 8 7 9 7 10 12 7 7 13 14 7 9 8 10 8 12 8 14 8 15 8 9 11 13 9 14 9 9 15 10 11 13 10...
output:
92331988
result:
ok 1 number(s): "92331988"
Test #5:
score: 0
Accepted
time: 33ms
memory: 7300kb
input:
15 67 2 1 2 1 3 5 1 1 6 1 8 11 1 12 1 1 13 15 1 2 5 2 6 8 2 2 10 11 2 2 12 13 2 2 14 4 3 9 3 3 10 11 3 15 3 5 4 7 4 8 4 10 4 11 4 4 12 13 4 14 4 5 6 5 8 9 5 10 5 12 5 13 5 14 5 6 7 6 8 6 9 6 10 6 11 6 14 7 8 10 7 11 7 12 7 7 15 9 8 8 10 13 8 8 14 10 9 9 11 9 12 13 9 14 9 15 9 13 10 15 10 12 11 14 11...
output:
237027263
result:
ok 1 number(s): "237027263"
Subtask #2:
score: 29
Accepted
Dependency #1:
100%
Accepted
Test #6:
score: 29
Accepted
time: 3730ms
memory: 371544kb
input:
21 146 0 1 6 7 1 1 8 1 9 10 1 1 11 1 14 1 15 1 16 18 1 1 19 1 21 2 3 4 2 5 2 2 7 2 8 2 9 2 12 13 2 2 15 2 17 2 18 2 19 2 20 2 21 4 3 5 3 3 6 3 7 8 3 3 10 12 3 3 13 3 15 3 16 3 18 20 3 3 21 4 5 4 6 4 8 9 4 12 4 13 4 17 4 18 4 20 4 4 21 5 6 5 7 5 8 5 9 12 5 13 5 5 14 5 15 5 17 18 5 5 19 20 5 5 21 6 8 ...
output:
739452507
result:
ok 1 number(s): "739452507"
Test #7:
score: 0
Accepted
time: 5104ms
memory: 371604kb
input:
21 209 0 15 17 18 21 8 20 7 20 11 17 11 13 12 18 2 13 19 20 4 8 6 13 3 20 5 10 4 20 1 5 7 13 5 7 4 10 4 9 6 7 4 18 8 17 1 11 3 13 11 19 2 15 3 8 14 19 5 16 2 10 13 21 4 21 7 11 5 20 3 7 6 19 9 17 13 16 5 12 1 6 3 15 6 16 2 5 4 5 8 16 1 3 1 16 1 14 2 9 7 16 10 16 2 18 13 15 7 10 11 12 10 20 6 10 1 20...
output:
835537739
result:
ok 1 number(s): "835537739"
Test #8:
score: 0
Accepted
time: 3816ms
memory: 371704kb
input:
21 146 0 2 1 1 4 5 1 1 7 1 8 1 9 13 1 14 1 15 1 16 1 1 17 18 1 1 19 2 3 2 4 5 2 2 6 7 2 2 8 9 2 2 10 2 11 2 12 13 2 15 2 2 18 19 2 2 20 21 2 5 3 3 6 7 3 3 10 13 3 14 3 15 3 3 16 3 17 3 20 21 3 4 7 4 9 10 4 4 11 12 4 4 13 4 16 4 17 18 4 4 20 21 4 5 7 8 5 5 9 13 5 5 14 15 5 5 16 5 17 5 18 5 20 21 5 7 ...
output:
873127243
result:
ok 1 number(s): "873127243"
Test #9:
score: 0
Accepted
time: 4571ms
memory: 371496kb
input:
21 205 0 4 10 8 15 8 16 6 21 1 5 9 15 1 7 12 18 2 19 5 10 7 18 8 10 11 20 3 11 18 20 4 20 15 17 15 19 3 5 2 18 19 20 8 19 1 3 8 13 7 21 10 17 16 17 5 13 15 21 5 6 9 20 1 16 2 13 16 20 10 19 10 11 1 11 2 21 13 20 2 12 14 19 2 3 3 9 4 16 4 14 9 13 10 18 4 11 16 21 4 9 7 14 3 19 14 18 7 20 3 10 15 16 5...
output:
38084232
result:
ok 1 number(s): "38084232"
Subtask #3:
score: 23
Accepted
Dependency #1:
100%
Accepted
Test #10:
score: 23
Accepted
time: 3897ms
memory: 371608kb
input:
21 159 1 2 1 3 1 5 1 7 1 1 9 11 1 12 1 13 1 17 1 18 1 1 19 20 1 2 3 2 4 5 2 7 2 2 8 2 10 12 2 13 2 2 14 15 2 2 18 19 2 20 2 21 2 3 4 5 3 6 3 7 3 3 8 9 3 3 10 3 11 3 12 3 13 14 3 3 15 16 3 18 3 3 19 3 21 5 4 6 4 4 7 8 4 9 4 4 11 4 14 4 15 16 4 17 4 19 4 21 4 5 6 5 7 5 9 10 5 11 5 12 5 5 14 15 5 5 17 ...
output:
211589144
result:
ok 1 number(s): "211589144"
Test #11:
score: 0
Accepted
time: 4849ms
memory: 371552kb
input:
21 208 1 12 15 5 13 15 18 2 11 12 19 3 11 11 15 9 11 5 14 11 13 7 12 1 5 3 5 8 13 14 18 9 21 2 4 1 12 3 7 9 10 12 20 5 15 10 20 15 19 16 18 18 20 13 16 3 9 16 20 6 13 11 16 15 17 1 20 4 6 11 21 1 3 1 15 8 21 13 19 7 21 17 19 4 5 10 11 11 17 3 20 7 10 12 18 7 9 5 16 11 12 3 12 14 19 8 20 12 21 7 13 5...
output:
56778317
result:
ok 1 number(s): "56778317"
Test #12:
score: 0
Accepted
time: 3736ms
memory: 371580kb
input:
21 137 1 3 1 1 4 5 1 7 1 8 1 1 11 1 12 13 1 16 1 1 17 1 19 20 1 21 1 2 3 2 4 2 5 7 2 8 2 9 2 10 2 2 11 12 2 2 13 17 2 18 2 2 19 3 4 3 6 3 13 14 3 15 3 17 3 3 18 19 3 21 3 4 5 6 4 7 4 4 8 9 4 10 4 4 11 4 12 4 14 15 4 16 4 4 19 4 20 6 5 7 5 8 5 9 5 10 5 5 11 12 5 13 5 5 15 5 17 5 18 5 19 21 5 7 6 6 10...
output:
490355723
result:
ok 1 number(s): "490355723"
Test #13:
score: 0
Accepted
time: 4540ms
memory: 371524kb
input:
21 205 1 16 18 6 14 10 14 1 2 12 14 4 8 12 16 1 4 2 15 14 16 4 11 15 17 4 7 3 16 11 17 15 21 13 20 2 21 6 19 13 14 20 21 17 19 9 19 10 20 7 9 11 15 7 13 8 14 4 15 8 13 5 14 3 11 8 9 10 21 3 10 14 18 5 16 5 20 17 18 3 17 1 8 5 10 13 15 3 9 7 21 14 20 1 20 8 10 1 13 5 17 13 16 15 18 4 10 18 21 1 5 18 ...
output:
748937625
result:
ok 1 number(s): "748937625"
Subtask #4:
score: 22
Accepted
Dependency #1:
100%
Accepted
Test #14:
score: 22
Accepted
time: 4781ms
memory: 371588kb
input:
21 207 2 2 6 9 20 2 11 11 19 6 9 7 20 12 19 12 18 15 18 1 4 5 8 20 21 17 18 5 9 12 14 4 14 15 17 18 20 3 18 11 13 4 17 12 15 2 19 10 20 11 17 5 7 3 4 14 21 9 21 13 17 9 13 13 20 3 17 2 17 2 8 17 20 1 17 9 19 2 12 4 9 14 15 14 18 6 15 16 20 3 8 12 17 5 10 9 10 8 15 4 16 2 21 5 13 9 15 1 21 2 10 8 11 ...
output:
317043733
result:
ok 1 number(s): "317043733"
Test #15:
score: 0
Accepted
time: 4621ms
memory: 371492kb
input:
21 205 2 6 14 7 19 2 3 6 7 5 18 1 10 3 19 16 18 4 15 10 16 13 21 9 11 12 19 13 19 1 18 15 16 7 11 2 11 9 19 4 13 14 21 4 17 6 8 11 18 12 14 15 19 11 14 2 16 4 11 10 19 10 13 10 21 5 6 2 13 4 21 4 5 9 10 7 14 1 15 4 16 8 11 5 19 5 21 13 16 1 6 4 20 16 17 5 11 13 14 5 9 3 11 11 20 6 15 8 15 6 11 5 10 ...
output:
364004893
result:
ok 1 number(s): "364004893"
Extra Test:
score: 0
Extra Test Passed