• hdu 3572 资源分配


    资源分配,每个时间点有m个机器可用,要将这资源分配给n个任务中的一些,要求每个任务在自己的时间范围中被分配了p[i]个资源,建图:

    建立源,与每个时间点连边,容量为m,每个任务向其对应的时间段中的每个时间点连边,容量1,每个任务向汇连边,容量为该任务需要的时间。

    收获:

      本题中的有:任务,时间,机器三个对象,但第三个对象是无区别的,所以它的限制就用容量表示,而其它对象都是不同的,所以要用点。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <queue>
      4 #include <vector>
      5 #define maxn 1010
      6 #define oo 0x3f3f3f3f
      7 using namespace std;
      8 
      9 struct Edge {
     10     int u, v, f;
     11     Edge( int u, int v, int f ):u(u),v(v),f(f){}
     12 };
     13 struct Dinic {
     14     int n, src, dst;
     15     vector<Edge> edge;
     16     vector<int> g[maxn];
     17     int dep[maxn], cur[maxn];
     18     
     19     void init( int n, int src, int dst ) {
     20         this->n = n;
     21         this->src = src;
     22         this->dst = dst;
     23         for( int u=1; u<=n; u++ )
     24             g[u].clear();
     25         edge.clear();
     26     }
     27     void add_edge( int u, int v, int f ) {
     28         g[u].push_back( edge.size() );
     29         edge.push_back( Edge(u,v,f) );
     30         g[v].push_back( edge.size() );
     31         edge.push_back( Edge(v,u,0) );
     32     }
     33     bool bfs() {
     34         queue<int> qu;
     35         memset( dep, 0, sizeof(dep) );
     36         qu.push(src);
     37         dep[src] = 1;
     38         while( !qu.empty() ) {
     39             int u=qu.front();
     40             qu.pop();
     41             for( int t=0; t<g[u].size(); t++ ) {
     42                 Edge &e=edge[g[u][t]];
     43                 if( e.f && !dep[e.v] ) {
     44                     dep[e.v] = dep[e.u]+1;
     45                     qu.push( e.v );
     46                 }
     47             }
     48         }
     49         return dep[dst];
     50     }
     51     int dfs( int u, int a ) {
     52         if( u==dst || a==0 ) return a;
     53         int past=0, remain=a, na;
     54         for( int &t=cur[u]; t<g[u].size(); t++ ) {
     55             Edge &e = edge[g[u][t]];
     56             Edge &ve = edge[g[u][t]^1];
     57             if( dep[e.v]==dep[u]+1 && e.f && (na=dfs(e.v,min(remain,e.f))) ) {
     58                 remain -= na;
     59                 past += na;
     60                 e.f -= na;
     61                 ve.f += na;
     62                 if( remain==0 ) break;
     63             }
     64         }
     65         return past;
     66     }
     67     int maxflow() {
     68         int mf = 0;
     69         while( bfs() ) {
     70             memset( cur, 0, sizeof(cur) );
     71             mf += dfs(src,oo);
     72         }
     73         return mf;
     74     }
     75 };
     76 
     77 int n, m;
     78 int p[maxn], s[maxn], t[maxn], maxd, sum;
     79 Dinic D;
     80 
     81 int main() {
     82     int T;
     83     scanf( "%d", &T );
     84     for( int cas=1; cas<=T; cas++ ) {
     85         scanf( "%d%d", &n, &m );
     86         maxd = sum = 0;
     87         for( int i=1; i<=n; i++ ) {
     88             scanf( "%d%d%d", p+i, s+i, t+i );
     89             maxd = max( t[i], maxd );
     90             sum += p[i];
     91         }
     92         D.init( n+maxd+2, n+maxd+1, n+maxd+2 );
     93         for( int i=1; i<=n; i++ ) {
     94             D.add_edge( D.src, i, p[i] );
     95             for( int d=s[i]+n; d<=t[i]+n; d++ ) 
     96                 D.add_edge( i, d, 1 );
     97         }
     98         for( int d=n+1; d<=n+maxd; d++ )
     99             D.add_edge( d, D.dst, m );
    100         bool ok = D.maxflow()==sum;
    101         printf( "Case %d: %s
    
    ", cas, ok ? "Yes" : "No" );
    102     }
    103 }
    View Code
  • 相关阅读:
    [Python] 项目的配置覆盖与合并
    [PHP] dompdf 使用记录
    Ubuntu16.04 desktop 设置共享文件夹 -- 图形界面配置
    (转)你不得不看的六篇知识图谱落地好文
    转 python2 与 python3 的编码
    (转) C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库
    django & celery
    (转) 解决django项目部署到nginx+uwsgi服务器后 admin页面样式消失的问题
    Ubuntu 16.04 安装 SVN-Client (RaabitVCS)
    python 2.7
  • 原文地址:https://www.cnblogs.com/idy002/p/4320525.html
Copyright © 2020-2023  润新知