静态模拟家谱树
#include
#include
struct node { char name[15]; int bcnt,scnt,son[105]; }a[105]; int ans; void _find(int x,int y) { if(ans)return; for(int i=0;i
if(a[y].son[i]==x){ans=
1;
break;} _find(x,a[y].son[i]);
if(ans)
return; } }
int main() {
int n,m;
char s[
80],ss[
8][
15];
scanf(
"%d%d",&n,&m);getchar();
for(
int i=
0;i
0;gets(s);
for(
int j=
0;s[j]!=
'\0';j++) { a[i].bcnt+=s[j]==
' ';
if(s[j]!=
' ') {
strcpy(a[i].name,s+j);
break;} }
memset(a[i].son,-
1,
sizeof(a[i].son)); }
for(
int i=
1;i
for(
int j=i-
1;j>=
0;j--)
if(a[i].bcnt-a[j].bcnt==
2) { a[j].son[a[j].scnt++]=i;
break; }
while(m--) {
for(
int i=
0;i<
6;i++)
scanf(
"%s",ss[i]);
int id1=
0,id2=
0;
for(
int i=
0;i
if(
strcmp(ss[
0],a[i].name)==
0) id1=i;
else
if(
strcmp(ss[
5],a[i].name)==
0) id2=i;
if(ss[
3][
0]==
'c') {
int flag=
0;
for(
int i=
0;i
if(a[id2].son[i]==id1) { flag=
1;
break; } flag?
puts(
"True"):
puts(
"False"); }
else
if(ss[
3][
0]==
'p') {
int flag=
0;
for(
int i=
0;i
if(a[id1].son[i]==id2) { flag=
1;
break; } flag?
puts(
"True"):
puts(
"False"); }
else
if(ss[
3][
0]==
's') {
for(
int i=
0;i
int flag=
0;
for(
int j=
0;j
if(a[i].son[j]==id1||a[i].son[j]==id2) flag++;
if(flag==
2) {
puts(
"True");
break;}
else
if(flag==
1||i==n-
1){
puts(
"False");
break;} } }
else
if(ss[
3][
0]==
'd') ans=
0,_find(id1,id2),ans?
puts(
"True"):
puts(
"False");
else ans=
0,_find(id2,id1),ans?
puts(
"True"):
puts(
"False"); } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202664.html原文链接:https://javaforall.net
