题目描述 :
有n名选手会进行m次比赛,每次比赛不会出现平局的情况,只会有一个胜者。
在每次比赛完成之后,我们视胜者选手的实力比败者选手的实力强,如果出现选手
A打败选手B,选手B打败选手C,选手C打败选手A,则视为他们的实力全部相同。
若该赛季最终冠军是属于实力最强者,请问依照现在已有的比赛结果,
最多有多少个选手可能获得冠军(如果已知两个人的实力一样强,那么他们两个人都不能获得冠军)。
输入描述:
第一行输入两个正整数n,m,其中:n<=10^5,m≤10^5
接下来m行,每行两个正整数a与b,代表选手a战胜了选手b,满足:a <=n ,b≤n
输出描述:
输出最多有多少名选手最终可能获得冠军。
题解:
利用C++的STL中的set集合:将输的人所代表的号码添加到set的集合中,此题的可以解读为----只要一个人在比赛中输一次,那这个人就不可能成为冠军,又因为set集合中只会添加不重复的数字,因此到最后set集合中记录的是输家的号码,也是输家的人数,因此胜者就是总数n减去set集合的长度;
代码:
#include<bits/stdc++.h>
#include<set>
using namespace std;
int main()
{
int n, m, a, b;
set <int> q; // 声明set集合,类型为整型,名称为q
cin>>n>>m;
while(m--)
{
cin>>a>>b; // 定义第一个人是赢家
q.insert(b);
}
cout<<(n - q.size())<<endl; // 冠军的数量
return 0;
}
结语:
好久没有更新博客了,更新一下。