题目链接
易得,将割边全部放在一边,让剩下的点组完全图即可得出最多边数。二分答案(\(m\)),如果\(\lceil \frac{m}{2} \rceil+\)完全图边数\(\ge m\)即可行。
#include<bits/stdc++.h> #define int long long using namespace std; int n,q,tmp; bool check(int m) { tmp=n-(m+1)/2;//完全图中点的个数 if(tmp<=0) return 0; return tmp*(tmp-1)/2+(m+1)/2>=m; } signed main() { scanf("%lld",&q); while(q--) { scanf("%lld",&n); int l=0,r=1e18,ans=0; while(l<=r) { int mid=(l+r)/2; if(check(mid)) {l=mid+1; ans=mid;} else r=mid-1; } printf("%lld\n",ans); } return 0; }