本文共 1581 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要根据给定的比赛结果,确定有多少头牛的排名是可以确定的。每头牛都有独特的技能水平,比赛结果显示哪头牛击败了哪头牛。我们可以利用图论中的弗洛伊德算法来确定每头牛之间的胜负关系,并通过分析这些关系来确定排名。
#includeusing namespace std;int main() { ios::sync_with_stdio(false); int N, M, a, b; bool win[N+1][N+1] = {false}; for (int i = 0; i <= N; ++i) { for (int j = 0; j <= N; ++j) { win[i][j] = false; } } cin >> N >> M; for (int i = 1; i <= M; ++i) { a = 0, b = 0; cin >> a >> b; win[a][b] = true; } for (int k = 1; k <= N; ++k) { for (int i = 1; i <= N; ++i) { if (!win[i][k]) continue; for (int j = 1; j <= N; ++j) { if (win[k][j]) { win[i][j] = true; } } } } int in[N+1] = {0}, out[N+1] = {0}; for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) { if (win[i][j]) { out[i]++; } if (win[j][i]) { in[i]++; } } } int ans = 0; for (int i = 1; i <= N; ++i) { if (in[i] == 0 || out[i] == 0) { ans++; } } cout << ans << endl; return 0;}
通过这种方法,我们可以高效地确定哪些牛的排名是可以确定的。
转载地址:http://nxir.baihongyu.com/