#include<stdio.h>
#define MAX 10
int n, m, cin[MAX][MAX], cout[MAX][MAX], cken[MAX], cjak[MAX], ck[MAX];
void bt1(int num, int f)//num 보다 더 큰애들 찾는거
{
int i;
for (i = 1; i <= cout[num][0]; i++)
{
if (ck[cout[num][i]] == 1)continue;
ck[cout[num][i]] = 1;
cken[f]++;
bt1(cout[num][i], f);
}
}void bt2(int num, int f)//num 보다 더 작은애들 찾는거
{
int i;
for (i = 1; i <= cin[num][0]; i++)
{
if (ck[cin[num][i]] == 1)continue;
ck[cin[num][i]] = 1;
cjak[f]++;
bt2(cin[num][i], f);
}
}
int main()
{
freopen("input.txt", "r", stdin);
int t, tn, a, b, i, j, dab;
scanf("%d", &tn);
for (t = 1; t <= tn; t++)
{
scanf("%d", &n);//a가 b보다 작다
scanf("%d", &m);
for (i = 1; i <= n; i++)
{
cken[i] = 0;
cjak[i] = 0;
ck[i] = 0;
for (j = 0; j <= n; j++)
{
cin[i][j] = 0;
cout[i][j] = 0;
}
}
dab = 0;
for (i = 1; i <= m; i++)
{
scanf("%d %d", &a, &b);//a가 b보다 작다 b<-a
cin[b][++cin[b][0]] = a; // 0 인덱스에는 들어오는 숫자가 적힘
cout[a][++cout[a][0]] = b;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)ck[j] = 0;
bt1(i, i);
bt2(i, i);
if (1 + cjak[i] + cken[i] == n) // 들어오는 것과 나가는 것의 합이 전체의 갯수와 같다면,
{
dab++;
}
}
printf("#%d %d\n", t, dab);
}
return 0;
}
댓글