牛客小白月赛36 E. 皇城PK

链接:https://ac.nowcoder.com/acm/contest/11213/E
来源:牛客网

题目描述

有nn名选手会进行mm次比赛,每次比赛不会出现平局的情况,只会有一个胜者。在每次比赛完成之后,我们视胜者选手的实力比败者选手的实力强,如果出现选手AA打败选手BB,选手BB打败选手CC,选手CC打败选手AA,则视为他们的实力全部相同。

若该赛季最终冠军是属于实力最强者,请问依照现在已有的比赛结果,最多有多少个选手可能获得冠军(如果已知两个人的实力一样强,那么他们两个人都不能获得冠军)。

输入描述:

第一行输入两个正整数nn,mm,其中:n≤105n≤105,m≤105m≤105。接下来mm行,每行两个正整数aa与bb,代表选手aa战胜了选手bb,满足:a≤na≤n,b≤nb≤n。

输出描述:

输出最多有多少名选手最终可能获得冠军。

示例1

输入

复制

3 2
1 2
1 3

输出

复制

1

水题,直接看有多少点入度为0即可。

#include <bits/stdc++.h>
#define N 100005
#define M 200005
using namespace std;
int n, m;
int head[N], ver[2 * M], Next[2 * M], tot = 0;
void add(int x, int y) {
	ver[++tot] = y, Next[tot] = head[x], head[x] = tot;
}
int deg[200005];
int main() {
	cin >> n >> m;
	for(int i = 1; i <= m; i++) {
		int x, y;
		cin >> x >> y;
		add(x, y);
		deg[y]++;
	}
	int ans = 0;
	for(int i = 1; i <= n; i++) {
		if(deg[i] == 0) {
			ans++;
		}
	}
	cout << ans;
}
原文地址:https://www.cnblogs.com/lipoicyclic/p/15022118.html