http://poj.org/problem?id=3038

这个题我是在一个关于并查集的博客中找到的,结果我就觉得这个应该是个贪心,真想不出这个与并查集有什么鬼关系,看discuss里面也都是贪心,我是不懂大神的想法,最后,我点开链接才发现那是杭电的3038.。。我也是醉了,然后一早上就搞了这一道题。贪心还是不怎么会。

题意:就是一个牛搞了一个航空公司,想让这个航空公司可以在一天来回运送最多的客人。求最多可以运送多少客人。

思路:discuss里面有个大神说的很简单,也很有道理。

1.碰到人,上车。

2.超载,最远的乘客下车。

3.行驶到下一站。

就这三句话,解决了这个题,可我还是有点懵,感觉思路还是不是很清晰。

最后看到了一个人的博客, 才最终懂了。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <queue>
  4. #include <stdlib.h>
  5.  
  6. #define maxn 50005
  7.  
  8. using namespace std;
  9.  
  10. int ans = ,c,exist[ maxn ];
  11.  
  12. struct note{
  13. int x,y,c;
  14. }to[ maxn ],ba[ maxn ];
  15.  
  16. int cmp(const void *a,const void *b) //排序
  17. {
  18. if((*(note *)a).x != (*(note * )b).x)
  19. return (*(note *)a).x - (*(note * )b).x;
  20. else
  21. return (*(note *)a).y - (*(note * )b).y;
  22. }
  23.  
  24. void deal(note tmp[],int x)
  25. {
  26. priority_queue<int,vector<int>,greater<int> >small;
  27. priority_queue<int,vector<int>,less<int> >most;
  28. int people = ,i;
  29. memset( exist , , sizeof( exist ) );
  30. for( i = ; i < x ; i++ )
  31. {
  32. small.push(tmp[i].y);
  33. most.push(tmp[i].y);
  34. exist[tmp[i].y] += tmp[i].c;
  35. while(tmp[i].x>=small.top()) //有人到达了目的地,下车。
  36. {
  37. people -= exist[ small.top() ];
  38. exist[ small.top() ] = ;
  39. small.pop();
  40. }
  41. people += tmp[ i ].c; //上车。
  42. ans += tmp[ i ].c;
  43. if(people >c) //是否超载。
  44. {
  45. int t = people-c;
  46. ans -= t;
  47. people = c;
  48. while(t)
  49. {
  50. if( exist[ most.top() ] > t)
  51. {
  52. exist[ most.top() ] -= t;
  53. t = ;
  54. }
  55. else
  56. {
  57. t -= exist[ most.top() ];
  58. exist[ most.top() ] = ;
  59. most.pop();
  60. }
  61. }
  62. }
  63. }
  64. }
  65.  
  66. int main()
  67. {
  68. //freopen("in.txt","r",stdin);
  69. int k,m,s,w,p,t = ,e = ;
  70. scanf("%d%d%d",&k,&m,&c);
  71. while( k-- )
  72. {
  73. scanf("%d%d%d",&s,&w,&p);
  74. if( s < w )
  75. {
  76. to[ t ].x = s;
  77. to[ t ].y = w;
  78. to[ t++ ].c = p;
  79. }
  80. else
  81. {
  82. ba[ e ].x = w;
  83. ba[ e ].y = s;
  84. ba[ e++ ].c = p;
  85. }
  86. }
  87. qsort( to , t , sizeof( to[ ] ) , cmp );
  88. deal( to , t );
  89. qsort( ba , e , sizeof( ba[ ] ) , cmp );
  90. deal( ba , e );
  91. printf("%d\n",ans);
  92. return ;
  93. }

poj 3038的更多相关文章

  1. Flying Right POJ - 3038

    有一条从南到北的航线,航线上有N个机场1-n从南到北分布,每天早上飞机从1飞到n,傍晚从n飞到1.有k组乘客,他们数量为M[k],从S飞到E,飞机上只有C个座位,计算每天飞机最多能拉多少乘客 贪心可以 ...

  2. POJ 3038 贪心(multiset)

    题意: 思路: 1. 贪心 我们考虑肯定是走最近的最合适 想象自己是一个黑一日游的司机: 1.如果有乘客要上车,那么就让他上,收钱! 2.如果超载了,把距目的地最远的几个乘客踢下去,退钱. 3.行驶到 ...

  3. 类似区间计数的种类并查集两题--HDU 3038 & POJ 1733

    1.POJ 1733 Parity game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5744   Accepted: ...

  4. poj 并查集

    http://poj.org/problem?id=1611 水题 题意:就是找一共有多少个人感染了,0是感染学生的编号. #include <stdio.h> #include < ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  7. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  8. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  9. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

随机推荐

  1. DataGridView列的宽度、行的高度自动调整

    注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...

  2. CSS让图片垂直居中的几种技巧

    在网页设计过程中,有时候会希望图片垂直居中的情况.而且,需要垂直居中的图片的高度也不确定,这就会给页面的布局带来一定的挑战.下面总结了一下,曾经使用过的几种方法来使图片垂直居中,除了第一种方法只限于标 ...

  3. JSP中ResultSet的方法

    1,如何获得ResultSet的结构 ResultSetMetaData rsmd=rs.getMetaData();cn=rsmd.getColumnCount();for(int ik=1;ik& ...

  4. 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...

  5. 【分享】仿东软OA协同办公服务管理源码

    功能列表: 1.个人办公管理: 内部邮件.消息管理.手机短信.公告通知.新闻管理.投票管理.个人考勤 日程安排:我的安排.下属安排 工作日志:我的日志.日志查询.日志设置 工作汇报:我的汇报.下属汇报 ...

  6. ORACLE 导入导出

    数据导出:1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/manager@TEST file=d:\daochu.dmp ...

  7. session过期返回登录页面跳出frame

    session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session ...

  8. Asp.Net MVC<九>:OWIN,关于StartUp.cs

    https://msdn.microsoft.com/zh-cn/magazine/dn451439.aspx(Katana 项目入门) 一不小心写了个WEB服务器 快刀斩乱麻之 Katana OWI ...

  9. 【bzoj1076】 SCOI2008—奖励关

    http://www.lydsy.com/JudgeOnline/problem.php?id=1076 (题目链接) 题意 一个奖励,K次抛出宝物的机会,每次抛出都等概率的抛出n个物品中的一个,每个 ...

  10. BZOJ4614 [Wf2016]Oil

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...