卧薪尝胆,厚积薄发。
Social Circles
Date: Wed Oct 10 15:29:12 CST 2018
In Category:
NoCategory
Description:
给
$n$
个人分配桌子,第
$i$
个人要求左边空凳子不少于
$l_i$
个,右边不少于
$r_i$
个,桌子随意,问最少需要几个凳子。
$1\leqslant n \leqslant10^5$
Solution:
先把每个人拆点成
$u^+$
和
$u^-$
,然后
$i^+$
和
$j^-$
连
$\max(l_i,r_j)$
的边,那最后这个二分图的最小权匹配就是答案,但是不能真求,考虑按
$l_i$
排序,那么最大的
$l_i$
肯定是尽可能带一个较大的
$r_j$
,所以把
$l$
和
$r$
分别排序一次对着取就行了。
Code:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n;
#define MAXN 100010
int a[MAXN],b[MAXN];
int main()
{
scanf("%d",&n);
for(int i = 1;i <= n;++i)
{
scanf("%d%d",&a[i],&b[i]);
}
sort(a + 1,a + 1 + n);
sort(b + 1,b + 1 + n);
long long ans = n;
for(int i = 1;i <= n;++i)
{
ans += max(a[i],b[i]);
}
cout << ans << endl;
return 0;
}
In tag:
算法-贪心
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡