poj 1698  Alice‘s Chance

题目地址: http://poj.org/problem?id=1698

题意: 演员Alice ,面对n场电影,每场电影拍摄持续w周,每周特定几天拍摄,每场电影需要Alice到场的天数为d。 请问Alice是否可以参与所有的电影拍摄。

最近在学习最大流的算法。

(1), 最大流真的是一种神奇的算法,最大的亮点是最大流的可回溯性,其可回溯性体现在反向边的提出。

(2), 最大流的应用也是非常灵活的,其中一个体现在如何构建流量网络,本题采用逆向思维, 0 作为出发点, 1,2,... n作为电影点,出发点与电影点之间的流量是每一场电影需要Alice去拍摄的天数的,n+1, n+2, ..... 7*tw+n 这部分代表的是所有天数的点。每一部电影都连接该电影拍摄特定的天数(流量为1), 最后所有的天数(n+1, n+2, ... 7*tw+n)汇集到终点 7*tw+n+1 , 如果这个点的最大流与顾客总天数一致,说明ok。

// 1698
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int INF = 2100000000;
const int maxn = 7*55 + 20 + 1 ; int n, mp[maxn][maxn], path[maxn], que[maxn*maxn]; int BFS(int src, int dest){
memset(path, -1, sizeof(path));
int cur, head = 0, tail = 0, minFlow = INF;
que[tail++] = src;
while(head < tail){
cur = que[head++];
if(cur == dest){
break;
}
for(int i=0; i<=dest; ++i){
if(path[i]==-1 && mp[cur][i]){
if(minFlow > mp[cur][i]){
minFlow = mp[cur][i];
}
path[i] = cur;
que[tail++] = i;
}
}
}
if(path[dest] == -1){
return -1;
}
return minFlow;
} int MaxFlow(int src, int dest){
int cur, pre, flow, maxFlow = 0;
while( (flow = BFS(src, dest)) != -1){
maxFlow += flow;
cur = dest;
while(cur != src){
pre = path[cur];
mp[pre][cur] -= flow;
mp[cur][pre] += flow;
cur = pre;
}
}
return maxFlow;
} int main(){
freopen("in.txt", "r", stdin); int test_num, d, w, sum, ans, tw=50, f[8];
scanf("%d", &test_num);
while(test_num--){
memset(mp, 0, sizeof(mp)); sum = 0;
scanf("%d", &n);
for(int j=1; j<=n; ++j){
for(int i=1; i<=7; ++i){
scanf("%d", &f[i]);
}
scanf("%d %d", &d, &w);
sum += d;
mp[0][j] += d;
for(int i=1; i<=7; ++i){
if(f[i] == 1){
for(int k=0; k<w; ++k){
mp[j][n + 7*k + i] += 1;
}
}
}
}
for(int j=n+1; j<=n+tw*7; ++j){
mp[j][n+tw*7+1] += 1;
}
ans = MaxFlow(0, n+tw*7+1);
if(ans == sum){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}

  

poj 1698 Alice‘s Chance的更多相关文章

  1. POJ 1698 Alice's Chance

    题目:Alice 要拍电影,每一天只能参与一部电影的拍摄,每一部电影只能在 Wi 周之内的指定的日子拍摄,总共需要花 Di 天时间,求能否拍完所有电影. 典型的二分图多重匹配,这里用了最大流的 din ...

  2. 图论--网络流--最大流--POJ 1698 Alice's Chance

    Description Alice, a charming girl, have been dreaming of being a movie star for long. Her chances w ...

  3. poj 1698 Alice's Chance 最大流

    题目:给出n部电影的可以在周几拍摄.总天数.期限,问能不能把n部电影接下来. 分析: 对于每部电影连上源点,流量为总天数. 对于每一天建立一个点,连上汇点,流量为为1. 对于每部电影,如果可以在该天拍 ...

  4. POJ 1698 Alice&#39;s Chance(最大流+拆点)

    POJ 1698 Alice's Chance 题目链接 题意:拍n部电影.每部电影要在前w星期完毕,而且一周仅仅有一些天是能够拍的,每部电影有个须要的总时间,问能否拍完电影 思路:源点向每部电影连边 ...

  5. poj 1698 Alice&#39;s Chance 拆点最大流

    将星期拆点,符合条件的连边,最后统计汇点流量是否满即可了,注意结点编号. #include<cstdio> #include<cstring> #include<cmat ...

  6. Alice's Chance POJ - 1698(按时间点建边)

    Alice's Chance Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7791   Accepted: 3174 De ...

  7. 2018.07.06 POJ1698 Alice's Chance(最大流)

    Alice's Chance Time Limit: 1000MS Memory Limit: 10000K Description Alice, a charming girl, have been ...

  8. POJ 1698 最大流

    Alice's Chance Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7327   Accepted: 2992 De ...

  9. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

随机推荐

  1. JAVA学习网址收藏

    什么是JDK?http://baike.baidu.com/subview/25214/5047948.htm?fr=aladdin Java经典入门教程(环境说明) http://wenku.bai ...

  2. ELF Format 笔记(九)—— Elf32_Sym 结构的 st_value 和 st_shndx 成员

    ilocker:关注 Android 安全(新手) QQ: 2597294287 前面的笔记中提到过 Elf32_Sym 结构,本篇笔记再写一下其中的 st_value 和 st_shndx 成员. ...

  3. PHP Redis

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Myredis { //redis所 ...

  4. [译] OpenStack Liberty 版本中的53个新变化

    一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么 ...

  5. [转]基于display:table的CSS布局

    当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...

  6. Zookeeper C API 指南四(C API 概览)(转)

    上一节<Zookeeper C API 指南三(回调函数)>重点讲了 Zookeeper C API 中各种回调函数的原型,本节将切入正题,正式讲解 Zookeeper C API.相信大 ...

  7. UVA 12169 Disgruntled Judge【扩展欧几里德】

    题意:随机选取x1,a,b,根据公式xi=(a*xi-1+b)%10001得到一个长度为2*n的序列,奇数项作为输入,求偶数项,若有多种,随机输出一组答案. 思路:a和b均未知,可以考虑枚举a和b,时 ...

  8. [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock

    操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...

  9. Java—FileOperator

    //基本用法 JFileChooser jfc = new JFileChooser(); int result = jfc.showOpenDialog(this); if(result != JF ...

  10. HTML 学习笔记(链接)

    HTML链接 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分. 当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手. 我 ...