版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/83062667
题目链接:http://codeforces.com/contest/1065/problem/B
题意:有一个图(无重边,无自环),有N个点,M条边,问你最多和最少的孤立点有点多少个
思路:对于最少的孤立点。考虑每条边可以连接两个点,所以M条边可以连接2*M条边,N-2*M的结果就是孤立点个数,如果为负数即没有孤立点。对于最多的孤立点,即要使得非孤立的点尽量构成完全图。对于V个点的完全图,边的个数是V*(V-1)/2,所以遍历一遍V即可。找到最小的一个V,则N-V就是最多的孤立点个数。
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n, m;
int main()
{
cin >> n >> m;
cout << max(n-2*m,0LL) << " ";
if(m == 0)
{
cout << n << endl;
return 0;
}
for(ll i = 1; i <= n; i++)
{
if(m <= i*(i-1)/2)
{
cout << n-i << endl;
return 0;
}
}
return 0;
}