#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{int to,next;}e[2005];
int head[205],v[205],st[205],dfn[205],low[205],p[205];
int top,tim,tot,sum,n,m,x,y,xp,yp,flag,cas;
void ins(int x,int y){
e[++tot].to=y;
e[tot].next=head[x];
head[x]=tot;
}
int get(){
int x;
char ch=getchar();
for (;ch!='h'&&ch!='m';ch=getchar());
scanf("%d",&x);
x*=2;
if (ch=='m') x--;
return x;
}
int tarjan(int x){
low[x]=dfn[x]=++tim;
v[x]=1; st[++top]=x;
for (int i=head[x];i;i=e[i].next)
if (!dfn[e[i].to]){
tarjan(e[i].to);
low[x]=min(low[x],low[e[i].to]);
}
else if (v[e[i].to]) low[x]=min(low[x],dfn[e[i].to]);
if (low[x]==dfn[x]){
sum++;
int now=0;
while (now!=x){
now=st[top--];
p[now]=sum;
v[now]=0;
}
}
}
int main(){
scanf("%d",&cas);
while (cas--){
top=tim=tot=sum=0;
memset(dfn,0,sizeof(dfn));
memset(head,0,sizeof(head));
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
x=get();
y=get();
if (x%2) xp=x++; else xp=x--;
if (y%2) yp=y++; else yp=y--;
ins(x,yp);
ins(y,xp);
}
flag=1;
for (int i=1;i<=2*n;i++)
if (!dfn[i]) tarjan(i);
for (int i=1;i<=n&&flag;i+=2)
if (p[i]==p[i+1]) flag=0;
if (!flag) printf("BAD\n"); else printf("GOOD\n");
}
}
bzoj1823: [JSOI2010]满汉全席
最新推荐文章于 2019-03-19 15:40:39 发布