直接Floyd传递闭包
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n, m, q;
bool f[110][110];
int main()
{
scanf("%d%d%d", &m, &n, &q);
for(int i=1; i<=m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
f[x][y]=1;
}
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
f[i][j]=f[i][j]||(f[i][k]&&f[k][j]);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(f[i][j]&&f[j][i])
{
printf("10000words to copy");
return 0;
}
while(q--)
{
int x, y;
scanf("%d%d", &x, &y);
if(f[x][y])
printf("YES\n");
else if(f[y][x])
printf("NO\n");
else printf("DK\n");
}
return 0;
}