zoukankan      html  css  js  c++  java
  • poj3553 拓扑序+排序贪心

    题意:有多个任务,每个任务有需要花费的时间和最后期限,任务之间也有一些先后关系,必须先完成某个才能开始某个,对于每个任务,如果没有越期,则超时为0,否则超时为结束时间-最后期限,求超时时间最大值最小的任务顺序。

    由于完成这些任务的总时间是一样的,所以只要贪心地尽量取结束时间早的先做就行,只不过加上了拓扑序的限制,就将任务按结束时间排大小,拓扑序做就行了。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<queue>
     4 using namespace std;
     5 
     6 const int maxn=5e4+5;
     7 const int maxm=5e5+5;
     8 
     9 struct job{
    10     int p,d,id,num;
    11     bool operator < (const job a)const{
    12         return d<a.d;
    13     }
    14 }w[maxn];
    15 
    16 int head[maxn],point[maxm],nxt[maxm],size;
    17 int n;
    18 
    19 void init(){
    20     memset(w,0,sizeof(w));
    21     memset(head,-1,sizeof(head));
    22     size=0;
    23     for(int i=1;i<=n;++i)w[i].num=i;
    24 }
    25 
    26 void add(int a,int b){
    27     point[size]=b;
    28     nxt[size]=head[a];
    29     head[a]=size++;
    30     w[b].id++;
    31 }
    32 
    33 void topo(){
    34     priority_queue<job>q;
    35     for(int i=1;i<=n;++i)if(!w[i].id)q.push(w[i]);
    36     while(!q.empty()){
    37         job u=q.top();
    38         q.pop();
    39         int s=u.num;
    40         printf("%d
    ",s);
    41         for(int i=head[s];~i;i=nxt[i]){
    42             int j=point[i];
    43             w[j].id--;
    44             if(!w[j].id)q.push(w[j]);
    45         }
    46     }
    47 }
    48 
    49 int main(){
    50     while(scanf("%d",&n)!=EOF){
    51         init();
    52         for(int i=1;i<=n;++i){
    53             scanf("%d%d",&w[i].p,&w[i].d);
    54         }
    55         int m;
    56         scanf("%d",&m);
    57         while(m--){
    58             int a,b;
    59             scanf("%d%d",&a,&b);
    60             add(a,b);
    61         }
    62         topo();
    63     }
    64     return 0;
    65 }
    View Code

     

    之前写的是总超时时间最小的任务顺序……其实笔误了,不过并没有人告知23333自己后来看的时候才发现写错了,不过A这道题的时候并没有想错

  • 相关阅读:
    Ubantu 安装Redis
    传说中的WCF(5):数据协定(a)
    传说中的WCF(4):发送和接收SOAP头
    传说中的WCF(3):多个协定
    传说中的WCF(2):服务协定的那些事儿
    传说中的WCF(1):这东西难学吗?
    Linq教程
    Installutil.exe的位置和路径
    uni-app中对输入框的判断与提示(密码格式为6-12位,必须有大小写字母和数字组成)
    uni-app系列回顾总结----项目国际化
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4797753.html
Copyright © 2011-2022 走看看