Educational Codeforces Round 52 (Rated for Div. 2)B. Vasya and Isolated Vertices·「模拟,思维」
B. Vasya and Isolated Vertices
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Vasya has got an undirected graph consisting of nn vertices and mm edges. This graph doesn't contain any self-loops or multiple edges. Self-loop is an edge connecting a vertex to itself. Multiple edges are a pair of edges such that they connect the same pair of vertices. Since the graph is undirected, the pair of edges (1,2)(1,2) and (2,1)(2,1) is considered to be multiple edges. Isolated vertex of the graph is a vertex such that there is no edge connecting this vertex to any other vertex.
Vasya wants to know the minimum and maximum possible number of isolated vertices in an undirected graph consisting of nn vertices and mm edges.
Input
The only line contains two integers nn and m (1≤n≤105,0≤m≤n(n−1)2)m (1≤n≤105,0≤m≤n(n−1)2).
It is guaranteed that there exists a graph without any self-loops or multiple edges with such number of vertices and edges.
Output
In the only line print two numbers minmin and maxmax — the minimum and maximum number of isolated vertices, respectively.
Examples
input
Copy
4 2
output
Copy
0 1
input
Copy
3 1
output
Copy
1 1
Note
In the first example it is possible to construct a graph with 00 isolated vertices: for example, it should contain edges (1,2)(1,2) and (3,4)(3,4). To get one isolated vertex, we may construct a graph with edges (1,2)(1,2) and (1,3)(1,3).
In the second example the graph will always contain exactly one isolated vertex.
题目大意:给定一个含有n个点的无项图,和m条边,问把这n个点连接起来最后最多剩下多少个孤立点,最少剩下多少个孤立点。
大致思路:我们知道,要想把n个点全部连接起来最多需要n (n + 1) / 2条边,所以我们可以逐个去掉n个点的每一个点,再在剩下的点里面按最多的边连边,最后看剩下多少个点。然后我们在来考虑剩下最少的点,要想保证最后剩下的点最少,我们就要使每个边尽可能多的连点,也就是说让一条边只连接两个点,每个点只有一条边相连,所以我们让m条边都连上点,最后在和0取最大值。
talk is cheap ,show me the code! .
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n,m;
while(~scanf("%lld %lld",&n,&m)){
ll minn,maxx;
minn = n;
maxx = -1;
for(ll i = 0; i <= n; i++){
ll k = n - i;
k = k * (k - 1) / 2;
if(k >= m) maxx = max(i,maxx);
}
while(m){
m--;
minn -= 2;
}
printf("%lld %lld\n",max(minn,0*1LL),maxx);
}
return 0;
}
推荐阅读
-
Educational Codeforces Round 52 (Rated for Div. 2)B. Vasya and Isolated Vertices
-
Educational Codeforces Round 52 (Rated for Div. 2) B. Vasya and Isolated Vertices
-
Educational Codeforces Round 52 (Rated for Div. 2) A. Vasya and Chocolate
-
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms(思维)
-
Educational Codeforces Round 53 (Rated for Div. 2) B. Vasya and Books
-
Educational Codeforces Round 52 (Rated for Div. 2) B. Vasya and Isolated Vertices
-
Educational Codeforces Round 50 (Rated for Div. 2) D. Vasya and Arrays(前缀和,思维)
-
cf Educational Codeforces Round 52 B. Vasya and Isolated Vertices
-
E. Vasya and a Tree (前缀和思维) Educational Codeforces Round 54 (Rated for Div. 2)
-
Educational Codeforces Round 51 (Rated for Div. 2).A. Vasya And Password(模拟)