[poj1698]Alice's Chance[网络流]
【转】原文:http://blog.csdn.net/wangjian8006/article/details/7926040
题目大意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影要拍d天,问爱丽丝能不能拍完所有的电影
第一行代表有多少组数据
对于每组数据第一行代表有n部电影
接下来2到n+1行,每行代表一个电影,每行9个数,前面7个数,1代表拍,0代表不拍,第8个数代表要拍几天,第9个数代表有几个礼拜时间拍
解题思路:
这题可以看做成二分图多重匹配,也可以用网络流实现,主要是建图,将图建好了就好说了
用s=0表示源点,t=371表示汇点
将371看做汇点的原因是,1-350表示每天,因为最多有50个星期....
351-370表示电影,因为电影最多只有20部
源点指向每部电影,最大容量为这部电影所拍摄的天数
电影指向天数,因为每天只能拍一部电影,若这天可以拍这部电影就表示最大容量为1
天数都指向汇点,最大容量都为1
这样建好图之后就可以直接从源点到汇点求最大流,看最大流是否等于每个电影天数相加只和,相等则可以拍完,不等则拍不完
/*
Memory 708K
Time 47MS
*/
#include <iostream>
#include <queue>
using namespace std;
#define min(a,b) (a>b?b:a)
#define MAXV 372
#define MAXINT INT_MAX int rc[MAXV][10]; //1到7为星期几,8是拍摄几天,9是在多少周内完成
int r[372][372]; //容量
int s,t,n,max_flow; //表示s源点与t汇点,n部电影 int parent[MAXV];
int dis[MAXV]; void read_graph(){
int i,j,k;
for(i=1;i<=n;i++){
r[0][i+350]=rc[i][8]; for(j=1;j<=7;j++){
if(rc[i][j]){
for(k=0;k<rc[i][9];k++)
r[i+350][j+k*7]=1;
}
}
} for(i=1;i<=350;i++) r[i][371]=1;
} int bfs(){
int k;
queue<int> q;
memset(dis,-1,sizeof(dis));
dis[t]=0; q.push(t);
while(!q.empty()){
k=q.front();
q.pop();
for(int i=0;i<372;i++){
if(dis[i]==-1 && r[i][k]){
dis[i]=dis[k]+1;
q.push(i);
}
}
if(k==s) return 1;
}
return 0;
} int dfs(int cur,int cp){
if(cur==t) return cp; int tmp=cp,t;
for(int i=0;i<372 && tmp;i++){
if(dis[i]+1==dis[cur] && r[cur][i]){
t=dfs(i,min(r[cur][i],tmp));
r[cur][i]-=t;
r[i][cur]+=t;
tmp-=t;
}
}
return cp-tmp;
} void dinic(){
max_flow=0;
while(bfs()){
max_flow+=dfs(s,MAXINT);
}
} int main(){
int i,j,ans,cnt;
scanf("%d",&cnt);
while(cnt--){
ans=0;s=0;t=371;
memset(r,0,sizeof(r)); scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=9;j++)
scanf("%d",&rc[i][j]);
ans+=rc[i][8];
} read_graph(); //建图
dinic(); if(ans==max_flow) printf("Yes\n");
else printf("No\n");
}
return 0;
}
[poj1698]Alice's Chance[网络流]的更多相关文章
- 2018.07.06 POJ1698 Alice's Chance(最大流)
Alice's Chance Time Limit: 1000MS Memory Limit: 10000K Description Alice, a charming girl, have been ...
- poj 1698 Alice‘s Chance
poj 1698 Alice's Chance 题目地址: http://poj.org/problem?id=1698 题意: 演员Alice ,面对n场电影,每场电影拍摄持续w周,每周特定几天拍 ...
- Alice's Chance POJ - 1698(按时间点建边)
Alice's Chance Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7791 Accepted: 3174 De ...
- 图论--网络流--最大流--POJ 1698 Alice's Chance
Description Alice, a charming girl, have been dreaming of being a movie star for long. Her chances w ...
- Alice's Chance
poj1698:http://poj.org/problem?id=1698 题意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影 ...
- Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)
题意 给你 \(n\) 个武器,\(m\) 个敌人,问你最多消灭多少个敌人,并输出方案. 总共有三种武器. SQL 火箭 - 能消灭给你集合中的一个敌人 \(\sum |S| \le 100000\) ...
- Codeforces 1045A Last chance 网络流,线段树,线段树优化建图
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045A.html 题目传送们 - CF1045A 题意 你有 $n$ 个炮,有 $m$ 个敌人,敌人排成一 ...
- POJ 1698 Alice's Chance
题目:Alice 要拍电影,每一天只能参与一部电影的拍摄,每一部电影只能在 Wi 周之内的指定的日子拍摄,总共需要花 Di 天时间,求能否拍完所有电影. 典型的二分图多重匹配,这里用了最大流的 din ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
随机推荐
- sort与sorted的区别
描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序 方法2.用内置函数sorte ...
- P4166 [SCOI2007]最大土地面积
传送门 首先,四边形的四个点肯定都在凸包上(别问我为什么我也不知道,感性理解一下好了) 那么我们可以求出凸包之后\(O(n^4)\)暴力枚举,据说在随机数据下凸包上的点只有\(O(logn)\)个可过 ...
- JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?
JAVA.C.C++.Python这四种编程语言,前三种玩的比较多,python做为兴趣爱好或者玩脚本的时候弄过,编程语言在使用的时候主要还是适合不合适,单片机使用的场景属于功能简单,成本相对较低,现 ...
- xfs文件备份恢复篇一vm中linux新增磁盘
XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统.centos7选择xfs格式作为默认文件系统,而且不 ...
- JS/JQuery操作DOM元素笔记
原因 自己目前在搭建一个.NET Core的框架,正在构建权限这块的东西,今天设置权限界面,需要使用JavaScript操作DOM元素,记录一下. 页面大概是酱紫的(我使用的AdminLTE和LayU ...
- 3最短路的几种解法 ------例题< 最短路 >
点击进入例题 最短路 我知道的有三种方法 1 : 深搜 每次 每次有更小的路径时 就更新 , 2 : Dijkstra 3 : floyd 前两种 是 单源 最短路径 ...
- Android内存管理(13)常见产生内存泄漏的原因
1.集合类泄漏 集合类如果仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用.如果这个集合类是全局性的变量 (比如类中的静态属性,全局性的 map 等即有静态引用或 final 一直指向它), ...
- springMVC是什么等七个问题
- 下载谷歌地图封锁IP解决办法
采用重新拨号,动态改变IP的方式.可以使用软件<易好用IP自动更换软件>
- C# Nugut CsvHelper 使用
装载自: 跳转链接>>>