CF1065B Vasya and Isolated Vertices 题解

CF1065B Vasya and Isolated Vertices 题解

题目分析

看着构造的标签进来的,进来前没想到这么简单

首先保留节点的最小值,就是让每一条边连接当前度数为 0 的两个点,这样子可以最大程度地利用每一条边。

所以 \(\min=\max(0,n-2*m)\)

那么保留节点的最大值,也就等价于最少的点连最多的边,很容易想到完全图,也就是点数为 \(n\) 的简单图 \(G\) ,最多有 \(\frac{n*(n-1)}{2}\) 条边。

二分出边数 \(\geq m\) ,点数最小且为 \(t\) 的完全图,

\(\max=n-t\)

Code:

#include<bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x){
    x=0;char ch=getchar();bool f=false;
    while(!isdigit(ch)) f|=ch=='-',ch=getchar();
    while(isdigit(ch))  x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x=f?-x:x;return;
}
template <typename T>
inline void print(T x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) print(x/10);
    putchar(x%10^48);return;
}
#define ll long long
ll n,m;
int main(){
    read(n),read(m);ll minn=0,maxn=0;
    minn=max(0ll,n-2*m);print(minn),putchar(' ');
    ll l=0,r=n;
    while(l<=r){
        ll mid=(l+r)>>1;
        if(mid*(mid-1)/2>=m)    r=mid-1,maxn=mid;
        else l=mid+1;
    }
    print(n-maxn);
    return 0;
}
posted @ 2021-09-13 11:33  NuoCarter  阅读(40)  评论(0编辑  收藏  举报