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

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

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

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

1.碰到人,上车。

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

3.行驶到下一站。

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

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

 #include <stdio.h>
#include <string.h>
#include <queue>
#include <stdlib.h> #define maxn 50005 using namespace std; int ans = ,c,exist[ maxn ]; struct note{
int x,y,c;
}to[ maxn ],ba[ maxn ]; int cmp(const void *a,const void *b) //排序
{
if((*(note *)a).x != (*(note * )b).x)
return (*(note *)a).x - (*(note * )b).x;
else
return (*(note *)a).y - (*(note * )b).y;
} void deal(note tmp[],int x)
{
priority_queue<int,vector<int>,greater<int> >small;
priority_queue<int,vector<int>,less<int> >most;
int people = ,i;
memset( exist , , sizeof( exist ) );
for( i = ; i < x ; i++ )
{
small.push(tmp[i].y);
most.push(tmp[i].y);
exist[tmp[i].y] += tmp[i].c;
while(tmp[i].x>=small.top()) //有人到达了目的地,下车。
{
people -= exist[ small.top() ];
exist[ small.top() ] = ;
small.pop();
}
people += tmp[ i ].c; //上车。
ans += tmp[ i ].c;
if(people >c) //是否超载。
{
int t = people-c;
ans -= t;
people = c;
while(t)
{
if( exist[ most.top() ] > t)
{
exist[ most.top() ] -= t;
t = ;
}
else
{
t -= exist[ most.top() ];
exist[ most.top() ] = ;
most.pop();
}
}
}
}
} int main()
{
//freopen("in.txt","r",stdin);
int k,m,s,w,p,t = ,e = ;
scanf("%d%d%d",&k,&m,&c);
while( k-- )
{
scanf("%d%d%d",&s,&w,&p);
if( s < w )
{
to[ t ].x = s;
to[ t ].y = w;
to[ t++ ].c = p;
}
else
{
ba[ e ].x = w;
ba[ e ].y = s;
ba[ e++ ].c = p;
}
}
qsort( to , t , sizeof( to[ ] ) , cmp );
deal( to , t );
qsort( ba , e , sizeof( ba[ ] ) , cmp );
deal( ba , e );
printf("%d\n",ans);
return ;
}

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. HTTPS 原理解析

    一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证 ...

  2. RapidJSON 代码剖析(一):混合任意类型的堆栈

    大家好,这个专栏会分析 RapidJSON (中文使用手册)中一些有趣的 C++ 代码,希望对读者有所裨益. C++ 语法解说 我们先来看一行代码(document.h): bool StartArr ...

  3. 【javascript】箭头函数

    ES6标准新增了一种新的函数:Arraw Function(箭头函数). x => x * x 这个函数相当于 function (x){ return x * x; } 题外话:user st ...

  4. 真正高效的SQLSERVER分页查询(多种方案)

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  5. JavaScript中URL的解码和编码

    这些URI方法encodeURI.encodeURIComponent().decodeURI().decodeURIComponent()代替了BOM的escape()和unescape()方法. ...

  6. Map工具系列-05-添加业务参数工具

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  8. BZOJ3631: [JLOI2014]松鼠的新家

    传送门 树上的差分优化,很简单的一道题,应该属于NOIP2015TGD2T3的子问题. //BZOJ 3631 //by Cydiater //2016.10.25 #include <iost ...

  9. Js对map的操作

    var map = {}; // 赋值 var key = "key1"; var value = "value1"; map[key] = value; // ...

  10. Python Day6

    面向对象 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强...&qu ...