2018.10.04 codeforces1060D. Social Circles(貪心)
阿新 • • 發佈:2018-12-13
傳送門
一道神奇的貪心。
考慮每次加入一個人,他要麼新構成一個圈,要麼利用之前已有的空位。
而不論如何決策,增加的貢獻只跟當前左右的最大值有關,因此我們只需保證每次取得的最小就行了。
因此我們可以將陣列排序,每次增加就可以了。
程式碼:
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
int n;
ll l[N], r[N],maxn=0,lm,rm,ans=0;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
ans=n=read();
for(int i=1;i<=n;++i)l[i]=read(),r[i]=read();
sort(l+1,l+n+1),sort(r+1,r+ n+1);
for(int i=1;i<=n;++i)ans+=max(l[i],r[i]);
cout<<ans;
return 0;
}