设为首页 加入收藏

TOP

POJ 1698 Alice's chance 网络流最大流的题目,但是主要是考建图,图建出来后就套模板就行
2015-11-21 01:34:40 来源: 作者: 【 】 浏览:5
Tags:POJ 1698 Alice' chance 网络 最大 题目 但是 要是 出来 后就套 模板

说一下题意:有一个小女孩从小就梦想成为一名影星,现在机会来了,有很多电影公司找她拍电影,但是这些拍电影的日程安排之间可能还有冲突,但是有女孩不想错过任何机会,想把每个公司的电影都接下来,但是她不知道能不能接下所有的电影,所有找到了你优秀的ACMER来帮忙解决问题。

数据的输入如下:有T组数据每组先有一个N表示要找她拍的电影的个数,其中N<=20;

每个电影有9个数据,前7个数据表示一个星期的7天 ,这7个数不是0,就是1,1表示能在这天拍电影,0表示不能在这天拍电影 还有2个数据D,W

D表示这部电影需要她拍D天才能完成,W表示这D天必须在前W周内。ok题意就是这样,下面考虑该怎样建图

***************************************

每部电影作为一个源点,然后把每个星期的每一天看成一个点,每个点只可以贡献一个工作日,即出边(到汇点)的容量只能是1,而入边的容量也为1,只要某部电影可以在该天工作,就可能选择该天,即该部电影对应的点到该个工作日对应的点之间连一条线,最后,添加一个超级源点,它到每部电影对于的点之间的容量为该部电影需要的工作日(不能为无穷大)

*****************************************

ok 图建完了就简单了只用判最大流是不是等于要拍的所有电影的天数的和,若等于就输出Yes,不然就输出No

?这题我也是用的上一题的代码稍微改了一下,建图部分就出来了

代码如下:

/*********
PRO: POJ 1698
TIT: Alice's Chance
DAT: 2013-08-12
AUT: UKean
EMA: huyocan@163.com
*********/
#include
#include
#include
#include
#include
#define  INF 1e9
using namespace std;
queue que;//广搜需要使用的队列
int M;//M是点数
int s,t;//源点和汇点
int flow[405][405];//残流量
int p[405];//广搜记录路径的父节点数组
int a[405];//路径上的最小残量
int cap[405][405];//容量网络
int ans;//最大流
int data[30][10];//存读入数据的部分
int sum;//存拍所有电影需要的天数
int read()
{
	int flim_num;cin>>flim_num;
	for(int i=0;i>data[i][j];

	s=0;t=1;//源点汇点

	for(int i=M=0;i0)
			{
				p[v]=u;
				que.push(v);
				a[v]=min(a[u],cap[u][v]-flow[u][v]);//路径上的最小残流量
			}
		}
		if(a[t]==0) break;
		for(int u=t;u!=s;u=p[u])
		{
			flow[p[u]][u]+=a[t];
			flow[u][p[u]]-=a[t];
		}
		ans+=a[t];
	}
	//cout<>T;
	while(T--)
	{
		read();
		if(deal()==sum)
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 1484 Alice and Bob's Tr.. 下一篇HDU 4337 King Arthur's Knig..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: