原题链接:http://poj.org/problem?id=3553

  这道题主要就是贪心思想吧,对于每个job,根据其截止时间 d从小到大排序,我们必须要尽快把dj最小的job完成掉,这样才能使max{Cj-dj, 0}最小(因为对于最小dj在没完成该工作时dj使不变的,如果你先做了其他没关联的工作,只会使Cj变大,从而使max{Cj-dj, 0}变大,这和题目所求刚好相反了)。因为要完成dj工作会需要先完成其他工作,那么这时候dfs一下,一步一步找到其祖先打印出来即可。

  网上有人用的拓扑排序+贪心,我表示没看懂。

 #include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std; const int maxn = + ;
int n, m; struct node
{
int p;
int d;
int id;
}job[maxn]; vector<int> V[maxn];
bool vis[maxn]; bool cmp(node a, node b)
{
return a.d < b.d;
} void dfs(int cur)
{
if(vis[cur])
return ;
vis[cur] = true;
int k = V[cur].size();
for(int i = ; i < k; i++)
dfs(V[cur][i]);
printf("%d\n", cur);
} void init()
{
memset(vis, false, sizeof vis);
for(int i = ; i <= n; i++)
V[i].clear();
} int main()
{
int a, b;
while(scanf("%d", &n) != EOF)
{
init();
for(int i = ; i <= n; i++)
{
scanf("%d%d", &job[i].p, &job[i].d);
job[i].id = i;
}
sort(job+, job+n+, cmp);
scanf("%d", &m);
for(int i = ; i <= m; i++)
{
scanf("%d%d", &a, &b);
V[b].push_back(a);
}
for(int i = ; i <= n; i++)
if(!vis[job[i].id])
dfs(job[i].id);
}
return ;
}

  

POJ 3553 Task schedule的更多相关文章

  1. POJ 3553 Task schedule【拓扑排序 + 优先队列 / 贪心】

    Task schedule Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 515 Accepted: 309 Special J ...

  2. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. Task schedule 分类: 比赛 HDU 查找 2015-08-08 16:00 2人阅读 评论(0) 收藏

    Task schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. HDU3572 Task Schedule 【最大流】

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. HDU4907——Task schedule(BestCoder Round #3)

    Task schedule Description有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务.有m个询问,每个询问有一个数字q,表示如 ...

  6. hdu 3572 Task Schedule

    Task Schedule 题意:有N个任务,M台机器.每一个任务给S,P,E分别表示该任务的(最早开始)开始时间,持续时间和(最晚)结束时间:问每一个任务是否能在预定的时间区间内完成: 注:每一个任 ...

  7. hdoj 3572 Task Schedule【建立超级源点超级汇点】

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. hdu 3572 Task Schedule (dinic算法)

    pid=3572">Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule

    In this post,I will show you SharePoint 2013 How to Backup Farm Automatically with a PowerShell and ...

随机推荐

  1. Linq连接数据库时,sql中的列为自增长,如何添加数据?

    1`首先在数据库中写入命令 SET IDENTITY_INSERT 表名 on 2·重新把表拖入 .dbml 中

  2. git与github

    Git-版本控制,多人协作,分布式: Github-开源项目,远程仓库: 我在github上建立了一个仓库 https://github.com/abcd/2016ife: 现在我要把它下载到本地: ...

  3. 10款免费CSS编辑器应对于Linux和Ubuntu

    您是否在使用Linux和Ubuntu的,不知道在哪里可以找到一些优秀且免费的CSS编辑器用于Linux和Ubuntu的?如果你的答案是肯定的,然后停止幻想,开始浏览这个帖子里,我们展示了前10名,并免 ...

  4. Linux驱动编程--基于I2C子系统的I2C驱动的Makefile

    ifeq ($(KERNELRELEASE),) KERNELDIR ?= /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd) TEST = ...

  5. [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)

    6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...

  6. Vim复制粘贴

    用了快一年Vim了,今天想要将vim里的一句话复制到浏览器里,结果捣鼓了半天.汗! 解决方案: 在vim中按“V”进入可视模式,选中要复制的文字 接下来要按3个键“+y(引号.加号.字母y),这样要复 ...

  7. crontab的应用

    当我们需要定时执行某个系统内的php脚本程序时,可以这样设置crontab * 19 * * * /usr/local/php/bin/php /var/www/test.php 此处表示调用php( ...

  8. mysql数据库表格导出为excel表格

    在本地数据库中操作如下: 由于excel表格的编码是GBK,所以导出时要加一个设置字符编码: select * from 某个表 into outfile 'd:/文件名.xls' CHARACTER ...

  9. Oracle 表的访问方式(2)-----索引扫描

    索引扫描(Index scan) 我们先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引 ...

  10. Hiberante+jpa,注解生成32字符的Id

    @Id @GenericGenerator(name = "id-generator", strategy = "uuid") @GeneratedValue( ...