D.失忆药水
题意:
给整数n,表示有一个n个点的完全图
一次操作可以从图中删掉一条边,问最少删掉多少条边可以使得图中不存在奇环
数据范围:n<=1e5
解法:
正难则反,将问题转化为最多保留多少条边,满足图中不存在奇环,用总边数减去保留的边数就是答案
考虑二分图,因为二分图中无奇环,令左半部和右半部点数相同,
二分图中同半部无边,要使得边数量最多,则令一部分的每个点对另一部分的每个点都连边,总边数为:(n/2)(n-n/2)
要令左半部和右半部点数相同也是因为两边相同的时候乘积最大
总边数减去保留的边数就是答案
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n;
while(cin>>n){
int remain=n/2*(n-n/2);
cout<<n*(n-1)/2-remain<<endl;
}
return 0;
}