17232 伪Acmer的推理

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0 收入:0

题型: 编程题   语言: G++;GCC

Description

现在正是期末,在复习离散数学的Acmer遇到了问题,你能帮助他吗?
Acmer正在复习的是推理,不过他的推理系统可能与别人的不一样。
(所以说他是一个伪Acmer~。做完这题,请自觉把这里伪Acmer自己定义的概念忘了。。否则到时学离散的时候混淆了概念的话自重。。。)
他的推理系统定义如下:
1.用大写英文字母A-Z表示一个命题。
2.用A→B表示若命题A成立则命题B成立。
3.用A↔B表示A→B且B→A。
(这里2,3皆表示一种逻辑关系。)
推理就是由若干个命题或逻辑关系出发,推出新的命题或逻辑关系。
如,已知A→B和B→C,我们可以推出A→C。
又如,已知A→B和A,我们可以推出B。
再如,如果仅有A、B成立,是不可以推出A→B的。
。。。。。。
现在Acmer已经知道了n个命题或逻辑关系是成立的。而且,他从这些前提出发,又推出了m个新的命题或逻辑关系出来。
不过,他的推理过程并不一定正确。所以,你能告诉他这m个结论中哪些是正确的,哪些是错误的吗?

输入格式

单case输入。
第一行是一个整数n(0<=n<=100)。
接下来n行,每行表示1个已知成立的命题或逻辑关系。
每行首先是一个数字x(1<=x<=3),
  若是1,后面接一个大写英文字母,表示一个命题。
  若是2,后面接两个大写英文字母,表示逻辑关系→。
  若是3,后面接两个大写英文字母,表示逻辑关系↔。
接着是一个整数m(0 < m <= 100)。
接下来m行,每行表示1个要求判断正误的命题或逻辑关系。
每行的格式同上。

输出格式

输出m行。对每个要你判断的结论,正确的话输出“yes”,否则输出“no”。

输入样例

Sample#1:
2
2 A B
2 B C
1
2 A C Sample#2:
1
2 A B
1
1 B Sample#3:
2
2 A B
1 A
1
1 B

输出样例

Sample#1:
yes Sample#2:
no Sample#3:
yes

提示

Sample#不是输入输出的一部分。
注意区别命题和逻辑关系成立的不同。
#include <iostream>
#include <cstdio>
using namespace std; int a[][];
int n;
void Warshall()
{
int i,j,k;
for(k=; k<; k++) //依次取得的可以作为中间点的顶点
{
for(i=; i<; i++)
{
for(j=; j<; j++)
{
if (a[i][k]>&&a[k][j]>)
{
if (a[i][i]==||a[k][k]==)
a[j][j]=;
if (a[i][j]!=)
a[i][j]=;
}
}
}
}
}
int main()
{
// freopen("data.txt","r",stdin);
int m,t;
char ch1,ch2;
scanf("%d\n",&n);
for (int j=; j<; j++)
{
a[j][j]=;
}
for (int i=; i<n; i++)
{
scanf("%d\n",&t);
if (t==)
{
scanf("%c",&ch1);
a[ch1-'A'][ch1-'A']=;
}
else if (t==)
{
scanf("%c\t%c",&ch1,&ch2);
a[ch1-'A'][ch2-'A']=;
}
else if (t==)
{
scanf("%c\t%c",&ch1,&ch2);
a[ch1-'A'][ch2-'A']=;
a[ch2-'A'][ch1-'A']=;
}
}
Warshall();
scanf("%d\n",&m);
for (int i=; i<m; i++)
{
scanf("%d\n",&t);
if (t==)
{
scanf("%c",&ch1);
if (a[ch1-'A'][ch1-'A']==)
{
printf("yes\n");
continue;
}
}
else if (t==)
{
scanf("%c\t%c",&ch1,&ch2);
if (a[ch1-'A'][ch2-'A']!=)
{
printf("yes\n");
continue;
}
}
else if (t==)
{
scanf("%c\t%c",&ch1,&ch2);
if (a[ch1-'A'][ch2-'A']!=&&a[ch2-'A'][ch1-'A']!=)
{
printf("yes\n");
continue;
}
}
printf("no\n");
}
return ;
}
04-14 17:06