QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#716354 | #2549. King's Palace | Milkcat2009 | WA | 1ms | 7964kb | C++14 | 2.1kb | 2024-11-06 15:00:25 | 2024-11-06 15:00:25 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
int n,m;
int st[22][3][3],oz[1<<22],lg[1<<22];
int co[22],dp[1<<22];char c1,c2;
int main(){
scanf("%d%d",&n,&m);
for(int i=0,u,v,x,y;i<m;i++){
scanf("%d%c%d%c",&u,&c1,&v,&c2);
x = (c1 == 'R' ? 0 : (c1 == 'G' ? 1 : 2));
y = (c2 == 'R' ? 0 : (c2 == 'G' ? 1 : 2));
u--,v--;
st[u][x][y]|=(1<<v);
st[v][y][x]|=(1<<u);
}
lg[0]=-1;
for(int s=1;s<(1<<n);s++)lg[s]=lg[s>>1]+1,oz[s]=lg[s&-s];
dp[0]=1;
for(int s=1;s<(1<<n);s++){
int x=oz[s];
for(int t=0;t<2;t++){
int vis=(1<<x);bool fl=0;
co[x]=t;queue<int>q;q.push(x);
while(!q.empty()){
int u=q.front();q.pop();
for(int o=0;o<2;o++){
for(int j=s&st[u][co[u]][o^1];j;j-=(j&-j)){
int v=oz[j];
if(!((vis>>v)&1))co[v]=o,q.push(v),vis|=(1<<v);
else if(co[v]!=o){fl=1;break;}
}
}
if(fl)break;
}
if(!fl)dp[s]+=dp[s^vis];
}
}
long long ans=0;
for(int s=0;s<(1<<n);s++){
bool fl=0;
int s_=((1<<n)-1)^s,vis=0;
queue<int>q;
for(int i=0;i<n;i++)if((s>>i)&1){
if(st[i][2][2]&s){fl=1;break;}
for(int o=0;o<2;o++){
for(int j=s_&st[i][2][o^1];j;j-=(j&-j)){
int v=oz[j];
if(!((vis>>v)&1))co[v]=o,q.push(v),vis|=(1<<v);
else if(co[v]!=o){fl=1;break;}
}
}
}
if(fl)continue;
while(!q.empty()){
int u=q.front();q.pop();
for(int o=0;o<2;o++){
for(int j=s_&st[u][co[u]][o^1];j;j-=(j&-j)){
int v=oz[j];
if(!((vis>>v)&1))co[v]=o,q.push(v),vis|=(1<<v);
else if(co[v]!=o){fl=1;break;}
}
}
if(fl)break;
}
if(!fl)ans+=dp[s_^vis];
}
return printf("%lld",ans),0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 7964kb
input:
2 3 1 R 2 R 1 G 2 R 1 B 2 G
output:
8
result:
wrong answer expected '6', found '8'