QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#643306 | #247. 州区划分 | Lackofgod | 100 ✓ | 6273ms | 451924kb | C++14 | 3.6kb | 2024-10-15 20:34:30 | 2024-10-15 20:34:30 |
Judging History
answer
#include <bits/stdc++.h>
#define forn(i,aa,bb) for(int i=aa;i<=bb;++i)
#define LL long long
#define pii pair<int,int>
using namespace std;
const int N=2.5e6+5;
const LL mod=998244353;
int n,m,p;
int f[23][(1<<21)],g[23][(1<<21)];
int d[30],w[30];
bool vis[30];
vector<int> G[N];
int s[N],sum[N];
int inv[N],fa[50];
vector<int> q;
int get(int x){
if (x==fa[x]) return fa[x];
return fa[x]=get(fa[x]);
}
int qpow(int aa,int bb){
int ans=1;
for(;bb>0;bb>>=1) {
if (bb&1ll) ans=1ll*ans*aa%mod;
aa=1ll*aa*aa%mod;
}
return ans;
}
int calc(int x){ return __builtin_popcount(x); }
int calc1(int x) {
int ans=1;
forn(i,1,p)
ans=1ll*ans*x%mod;
return ans;
}
int lowbit(int x){
return x&(-x);
}
void OR(int*f,int x,int n){ // [0,n-1]
for(int len=2;len<=n;len*=2){
for(int i=0;i<n;i+=len){
int mid=len>>1;
for(int j=0;j<mid;j++){
f[i+j+mid]=(f[i+j+mid]+1ll*f[i+j]*x%mod)%mod;
f[i+j+mid]=(f[i+j+mid]+mod)%mod;
}
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
//cin>>T;
T=1;
while (T--) {
cin>>n>>m>>p;
forn(i,0,n-1)
s[(1<<i)]=i+1;
forn(i,1,m) {
int x,y;
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
forn(i,1,n)
cin>>w[i];
int lim=n; n=(1<<n);
f[0][0]=0;
forn(i,1,n-1) {
q.clear();
forn(j,0,lim)
d[j]=0,vis[j]=0,fa[j]=j;
for(int x=i;x>0;x-=lowbit(x)) {
int now=s[lowbit(x)];
vis[now]=1;
sum[i]+=w[now];
q.push_back(now);
}
bool fl=0;
int bl=q.size();
for(int x:q) {
int cur1=get(x);
for(int y:G[x])
if (vis[y]) {
d[x]++;
y=get(y);
if (y!=cur1) fa[y]=cur1,bl--;
}
if (d[x]&1ll) {
fl=1;
break;
}
}
if (bl>1) fl=1;
if (fl) g[calc(i)][i]=calc1(sum[i]);
else g[calc(i)][i]=0;
inv[i]=calc1(qpow(sum[i],mod-2));
}
// forn(i,1,lim) {
// forn(j,0,n-1)
// cout<<g[i][j]<<' ';
// cout<<'\n';
// }
g[0][0]=1ll;
forn(i,0,lim)
OR(g[i],1,n);
f[0][0]=1ll;
OR(f[0],1,n);
forn(i,1,lim) {
forn(j,0,i)
forn(k,0,n-1)
f[i][k]=(f[i][k]+1ll*f[i-j][k]*g[j][k]%mod)%mod;
OR(f[i],-1,n);
forn(k,0,n-1) {
if (calc(k)==i) f[i][k]=1ll*f[i][k]*inv[k]%mod;
else f[i][k]=0;
}
if (i<lim) OR(f[i],1,n);
}
cout<<f[lim][n-1]<<'\n';
}
}
// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
// 0 0 0 19321 0 29241 14884 0 0 18769 7744 0 14400 0 0 0 0 9409 2304 0 6400 0 0 0 2116 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 46656 0 0 0 33124 0 0 27225 0 0 0 0 20164 0 30276 15625 0 0 19600 8281 0 15129 0 0 0
// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67081 0 0 0 0 0 0 0 47961 0 0 0 34225 0 47089 28224 0
// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68644
詳細信息
Subtask #1:
score: 26
Accepted
Test #1:
score: 26
Accepted
time: 12ms
memory: 81364kb
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: 26
Accepted
time: 7ms
memory: 91668kb
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: 26
Accepted
time: 60ms
memory: 104124kb
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: 26
Accepted
time: 63ms
memory: 103900kb
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: 26
Accepted
time: 51ms
memory: 128984kb
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: 5551ms
memory: 451924kb
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: 29
Accepted
time: 6273ms
memory: 449760kb
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: 29
Accepted
time: 5540ms
memory: 450064kb
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: 29
Accepted
time: 5817ms
memory: 449848kb
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: 5600ms
memory: 449812kb
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: 23
Accepted
time: 6219ms
memory: 449844kb
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: 23
Accepted
time: 5550ms
memory: 449868kb
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: 23
Accepted
time: 5931ms
memory: 451920kb
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: 5987ms
memory: 449916kb
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: 22
Accepted
time: 6011ms
memory: 449764kb
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