zoukankan      html  css  js  c++  java
  • poj 1698 Alice's Chance SAP 最大流

    【题意】:Alice有n部电影要拍,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影要拍d天,问爱丽丝能不能拍完所有的电影

    【建图】:源点与每部电影连边,容量为天数,每部电影与可以拍该电影的那些天数连边,容量为1,再所有的天数与汇点连边容量为1。 要注意天数和汇点连边的时候不要重复了,我这里用的数组不会出现这种情况。

     1 #include<iostream>
     2 #include<vector>
     3 #include<cstring>
     4 #include<queue>
     5 #include<cstdio>
     6 using namespace std;
     7 #define maxx 400
     8 #define INF 9999999
     9 
    10 int c[maxx][maxx],f[maxx][maxx],p[maxx], a[maxx];
    11 
    12 void add(int u,int v,int w)
    13 {
    14     c[u][v]=w;
    15     
    16 }
    17 
    18 int maxflow(int s,int t,int n)
    19 {
    20     queue<int> q;
    21     memset(f,0,sizeof(f));
    22     int flow=0;
    23     while(1)
    24     {
    25         memset(a,0,sizeof(a)); 
    26         a[s] = INF; 
    27         q.push(s);  
    28 
    29         while(!q.empty()) 
    30         {
    31             int u = q.front();
    32             q.pop();
    33             for(int v = 1; v <= n; v++) if(!a[v] && c[u][v] > f[u][v]) 
    34                 {
    35                     p[v] = u;
    36                     q.push(v); 
    37                     a[v] = min(a[u], c[u][v]-f[u][v]); 
    38                 }
    39         }
    40 
    41         if(a[t] == 0)
    42             break; 
    43         for(int u = t; u != s; u = p[u]) 
    44         {
    45             f[p[u]][u] += a[t]; 
    46             f[u][p[u]] -= a[t]; 
    47         }
    48         flow += a[t]; 
    49     }
    50     return flow;
    51 }
    52 
    53 int main()
    54 {
    55     int cnt,n;
    56     scanf("%d",&cnt);
    57     while(cnt--)
    58     {
    59         scanf("%d",&n);
    60         memset(c,0,sizeof(c));
    61         int ok[10],day,week,tt=371,tot=0;
    62         for(int i=1; i<=n; i++)
    63         {
    64             for(int j=0; j<7; j++)
    65                 scanf("%d",&ok[j]);
    66             scanf("%d%d",&day,&week);
    67             tot+=day;
    68             add(0,i,day);
    69             for(int j=0; j<week; j++)
    70                 for(int k=0; k<7; k++)
    71                 {
    72                     if(ok[k])
    73                        add(i,j*7+k+n+1,1);
    74                     add(j*7+k+n+1,tt,1);
    75                 }
    76         }
    77         int flow;
    78         flow=maxflow(0,tt,tt);
    79         //printf("flow  %d
    ",flow);
    80         if(tot==flow)
    81             printf("Yes
    ");
    82         else printf("No
    ");
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    UV有问题?
    利用GPU实现翻页效果(分享自知乎网)
    Directx 9 VS2015环境搭建
    DirectX 读书笔记(14) Cube mapping之SkyBox[转]
    vertex shader must minimally write all four components of POSITION
    unity shader 内置变量
    Real-Time Rendering (2)
    矩阵变换:沿任意轴旋转及其推导
    Python爬虫教程-33-scrapy shell 的使用
    Python爬虫教程-32-Scrapy 爬虫框架项目 Settings.py 介绍
  • 原文地址:https://www.cnblogs.com/assult/p/3947757.html
Copyright © 2011-2022 走看看