1234567891011121314151617181920212223242526272829303132333435 |
- #include <cstdio>
- #include <cstring>
- using namespace std;
- const int N = 500;
- const int M = 4500;
- const int INF = 0x3F3F3F3F;
- bool win[N + 1][N + 1];
- int main() {
- int n, m, a, b;
- while (scanf("%d %d", &n, &m) != EOF) {
- memset(win, 0, sizeof(win));
- for (int i = 0; i < m; i++) {
- scanf("%d %d", &a, &b);
- win[a][b] = true;
- }
- for (int k = 1; k <= n; k++)
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= n; j++) win[i][j] |= win[i][k] & win[k][j];
- int ans = 0;
- for (int i = 1; i <= n; i++) {
- int cnt = 0;
- for (int j = 1; j <= n; j++) {
- if (win[i][j]) cnt++;
- if (win[j][i]) cnt++;
- }
- if (cnt == n - 1) ans++;
- }
- printf("%d\n", ans);
- }
- return 0;
- }
|