「CCO 2017」专业网络

Kevin 正在一个社区中开发他的专业网络。不幸的是,他是个外地人,还不认识社区中的任何人。但是他可以与 个人建立朋友关系 。

然而,社区里没几个人想与一个外地人交朋友。Kevin 想交朋友的 个人都有类似但不同的与外地人交友的准则。在 Kevin 已经直接认识了社区中的 个人后,第 个人就愿意与 Kevin 交朋友了,否则 Kevin 就要付出 的代价与他成为朋友。

你的任务是,使 Kevin 与这 个人都交上朋友,并且最小化他付出的代价。

输入格式

第一行包含整数 。接下来的 行每行包含两个整数 和 。

输出格式

输出一行一个整数表示 Kevin 付出的最小代价。

样例

样例输入 1

4
3 3
1 2
0 5
3 4

样例输出 1

3

样例 1 解释

Kevin 可以立即与 号人成为朋友,因为已经建立了这个朋友关系,他也能与 号人成为朋友。他需要付出 的代价与 号人成为朋友,这样他一共有 个朋友,使得他能与 号人成为朋友。

样例输入 2

5
0 9
1 8
2 7
3 6
4 5

样例输出 2

0

样例 2 解释

Kevin 不用付出任何代价就能和所有人成为朋友。

样例输入 3

3
0 6
2 7
3 8

样例输出 3

8

样例 3 解释

Kevin 应该立即与 号人成为朋友,然后付出 的代价与 号人成为朋友, 最后与 号人建立朋友关系。

题解

a[i].x 为需要的朋友数,a[i].y为付出的代价。

已经交了 i 个朋友,正在交 j 这个朋友,那么 j 的取值可以为 [0,n-1],因为朋友关系是唯一的。而想要免费交到,就需要j的取值在 [a[i].x,n-1] 内。贪心选取最大值,将数组以 a[i].y从大到小排序。

类似于不守交规那道题,那里的过期就相当于这里的 j<a[i].x。仿照此题,我们从过期的临界 a[i].x开始枚举到 n-1
对于一个 i,如果在范围中已经没有数没有被对应到,那么它一定需要支付费用。
那么这一段的代码也就很好写了

for(int i=1;i<=N;++i){
   
	bool f=true;
	for(int j=p[i].a;j<N;++j)
		if(!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值