题意:给出n个数和m个他们的关系,问有多少个能确定它排的位置。
思路:一看n在100以内,Floyd传递闭包,然后计算入度出度,若入度出度加起来等于n-1的话,则位置确定。
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
int n, m, dis[N][N], in[N], out[N];
int main() {
cin >> n >> m;
for(int x, y, i = 0; i < m; i++) {
cin >> x >> y;
dis[x][y] = 1;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
dis[i][j] |= (dis[i][k] & dis[k][j]);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i != j && dis[i][j])
in[j]++, out[i]++;
int ans = 0;
for(int i = 1; i <= n; i++)
if(in[i] + out[i] == n - 1)
ans++;
cout << ans;
return 0;
}