• 网络流HDU 2883


    建图           源点  ->     每个人  ->           每段时间      ->      汇点 

    时间要离散化一下 分成一些时间段

    权                     inf    ti[i]*(time[i]-time[i-1])  m*(time[i]-time[i-1])

    n人 m个机器

    开始时间  总共要的数目 底线时间  每个所需时间 

    如果可以达到输出Y 否则N

      1 #include<stdio.h>
      2 #include<algorithm>
      3 #include<string.h>
      4 #include<queue>
      5 #include<math.h>
      6 
      7 using namespace std;
      8 #define inf   100000000
      9 #define MAXN 300
     10 #define MAXN1 200000
     11 int si[MAXN+10],ni[MAXN+10],ei[MAXN+10],ti[MAXN+10];
     12 int time[MAXN*2+10],S,T;
     13 int head[5*MAXN];
     14 int cnt;
     15 
     16 struct edg
     17 {
     18     int w,next,to;
     19 
     20 }x[MAXN1+10];
     21 
     22 void add(int u,int v,int w)
     23 {
     24     x[cnt].next=head[u];
     25     x[cnt].to=v;
     26     x[cnt].w=w;
     27     head[u]=cnt++;
     28 }
     29 int vis[5*MAXN];
     30 
     31 int bfs()
     32 {
     33     memset(vis,-1,sizeof(vis));
     34     vis[S]=0;
     35     queue<int>q1;
     36     q1.push(S);
     37 
     38     while(!q1.empty())
     39     {
     40         int now=q1.front();
     41         q1.pop();
     42         for(int j=head[now];j!=-1;j=x[j].next)
     43         {
     44             if(vis[x[j].to]<0&&x[j].w)
     45             {
     46                 vis[x[j].to]=vis[now]+1;
     47                 q1.push(x[j].to);
     48             }
     49         }
     50     }
     51     return vis[T]!=-1;
     52 }
     53 int dfs(int u,int w)
     54 {
     55     int ans=0;
     56 
     57     if(u==T)
     58         return w;
     59     int i;
     60 
     61     for(i=head[u];i!=-1;i=x[i].next)
     62     {
     63         if(vis[x[i].to]==vis[u]+1&&x[i].w)
     64         {
     65             int b=dfs(x[i].to,min(w-ans,x[i].w));
     66             x[i].w-=b;
     67             x[i^1].w+=b;
     68             ans=ans+b;
     69         }
     70     }
     71     return ans;
     72 }
     73 int main()
     74 {
     75     int n,m;
     76 
     77     while(scanf("%d%d",&n,&m)!=EOF)
     78     {
     79         int i,j;
     80         int c1,sum=0;
     81         cnt=0;
     82 
     83         for(i=1;i<=n;i++)
     84         {
     85             scanf("%d%d%d%d",&si[i],&ni[i],&ei[i],&ti[i]);
     86             time[cnt++]=si[i];
     87             time[cnt++]=ei[i];
     88             sum=sum+ni[i]*ti[i];
     89         }
     90         sort(time,time+cnt);
     91         c1=1;
     92         for(i=1;i<cnt;i++)
     93         {
     94             if(time[i]!=time[i-1])
     95                 time[c1++]=time[i];
     96         }
     97         S=0;
     98         T=n+c1+1;
     99         cnt=0;
    100 
    101         memset(head,-1,sizeof(head));
    102         for(i=1;i<=n;i++)
    103             add(S,i,ni[i]*ti[i]),add(i,S,0);
    104 
    105         for(i=0;i<c1;i++)
    106         {
    107             if(i==0) //0的时候没有i-1
    108             {
    109                 add(n+i+1,T,m*time[i]);
    110                 add(T,n+i+1,0);
    111             }
    112             else
    113             {
    114                 add(n+i+1,T,m*(time[i]-time[i-1]));
    115                 add(T,n+i+1,0);
    116             }
    117 
    118             for(j=1;j<=n;j++)
    119             {
    120                 int a;
    121 
    122                 if(i==0)
    123                     a=0;
    124                 else
    125                     a=time[i-1];
    126                 if(si[j]<=a&&time[i]<=ei[j])
    127                 {
    128                     add(j,n+i+1,inf);
    129                     add(n+i+1,j,0);
    130                 }
    131             }
    132         }
    133         int ans=0;
    134         while(bfs())
    135             ans=ans+dfs(S,inf);
    136 
    137         if(ans>=sum)
    138             printf("Yes
    ");
    139         else
    140             printf("No
    ");
    141     }
    142 
    143     return 0;
    144 }
  • 相关阅读:
    一个简单的投票功能
    快速删除.svn文件夹
    屏蔽关键字
    批量过滤POST GET数据
    JS识别ios & 安卓
    HashMap
    GC
    类与类之间的关系
    玩转大数据之Apache Pig如何与Apache Lucene集成
    大话设计模式-简单工厂模式
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6045642.html
Copyright © 2020-2023  润新知