zoukankan      html  css  js  c++  java
  • 防晒【贪心 + 平衡树】


    image

    证明不会:yxc说要用匈牙利算法,来确定增广路径;

    算法步骤:

    1.将牛按minspf从大到小排序

    2.每次取出满足当前条件,最大的spf。


    因为是按开始从大到小排序,所以假设x, y防晒,spfs[x] < spfs[y], 那么可能后面的牛能用到x,y,或者只用到x,或者都用不上。因为后面的牛可能可以用x,所以当前这头牛应该选择在它适合的范围最大的spf。

    所以结论成立。

    代码

      1 #include <iostream>
      2 #include <algorithm>
      3 #include <map>
      4 using namespace std;
      5 
      6 typedef pair<int, int> PII;
      7 const int N = 2500 + 5;
      8 PII cows[N];
      9 int main(){
     10     int c,l;
     11     cin >> c >> l;
     12     map<int, int> spfs;
     13     for(int i = 0; i < c; ++ i)cin >> cows[i].first >> cows[i].second;
     14     for(int i = 0; i < l; ++ i){
     15         int spf, cover;
     16         cin >> spf >> cover;
     17         spfs[spf] += cover;
     18     }
     19     sort(cows, cows+c);
     20     int res = 0;
     21     spfs[0] = spfs[1001] = c; //auto spf = spfs.upper_bound(cows[i].second);
     22                             //这句话是在spfs中查找大于cows[i].second的最小元素
     23                             //,设置哨兵是为了让这条语句不返回空。
     24     for(int i = c-1; i >= 0; -- i){
     25         auto spf = spfs.upper_bound(cows[i].second);//找出第一个大于它的数
     26         spf--;
     27         if(spf->first >= cows[i].first){
     28             res++;
     29             if(--spf->second == 0)
     30                 spfs.erase(spf);
     31         }
     32     }
     33     cout << res << endl;
     34     return 0;
     35 }
  • 相关阅读:
    python之异常处理
    python之面向对象深入探测
    python之模块
    php的core问题
    cookie 和session 的区别
    OSI的七层模型和TCP/IP的五层模型
    解释HTTP中Get和Post。它们有什么区别,哪个使用时更加安全?
    进程和线程的区别
    几个算法小题目--桶排序
    链表的两道小练习-链表翻转与链表中间值
  • 原文地址:https://www.cnblogs.com/rstz/p/14391034.html
Copyright © 2011-2022 走看看