poj 1698 Alice's Chance 二分图多重匹配

题意:

一个演员要拍n部电影,每部电影只能在一周的特定几天拍(如周2,周4,周5),第i部电影要拍di天,必须要在wi周拍完,问演员是否可以完成任务。

分析:

建二分图,转化为二分图的多重匹配。

代码:

//poj 1698
//sep9
#include <iostream>
using namespace std;
const int maxX=64*7;
const int maxY=64;
int g[maxX][maxY],match[maxY][maxX];
int vis[maxY];
int x,n;

struct FILM{
	int a[10];
	int need_day;
	int finish_week;
}film[32];

int dfs(int x)
{
    int i,j;
    for(i=0;i<n;++i){
        if(vis[i]==0&&g[x][i]==1){
            vis[i]=1;
            if(match[i][0]<film[i].need_day){
                match[i][++match[i][0]]=x;
                return 1;
            }
            else{
                for(j=1;j<=match[i][0];++j)
                    if(dfs(match[i][j])==1){
                        match[i][j]=x;
                        return 1;
                    }
            }
        }
    }
    return 0;
}  

void mulmatch()
{
    int i,j;
    for(i=0;i<n;++i)
        match[i][0]=0;
    for(i=0;i<=x;++i){
        memset(vis,0,sizeof(vis));
        dfs(i);
    }
} 

int main()
{
	int cases;
	scanf("%d",&cases);
	while(cases--){
		memset(g,0,sizeof(g));
		scanf("%d",&n);
		for(int i=0;i<n;++i){
			for(int j=0;j<7;++j)
				scanf("%d",&film[i].a[j]);
			scanf("%d%d",&film[i].need_day,&film[i].finish_week);
		}
		x=-1;
		for(int i=0;i<n;++i)
			for(int j=0;j<film[i].finish_week;++j)
				for(int k=0;k<7;++k)
					if(film[i].a[k]==1){
						x=max(x,j*7+k);
						g[j*7+k][i]=1;
					}
		mulmatch();
		int ok=1;
		for(int i=0;i<n;++i)
			if(match[i][0]<film[i].need_day){
				ok=0;
				break;
			}
		if(ok==1) puts("Yes");
		else puts("No");
	}
	return 0;
} 

poj 1698 Alice's Chance 二分图多重匹配

时间: 2024-10-07 05:31:58

poj 1698 Alice's Chance 二分图多重匹配的相关文章

POJ 1698 Alice&#39;s Chance(网络流之最大流)

题目地址:POJ 1698 水题..将每部电影与它可以演的那一天连边就行了.建二分图.用二分最大匹配也完全可以做. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queu

poj 1698 Alice&#39;s Chance(网络流)

Alice's Chance Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5280   Accepted: 2171 Description Alice, a charming girl, have been dreaming of being a movie star for long. Her chances will come now, for several filmmaking companies invit

POJ 1698 Alice&#39;s Chance 网络流(水

题目链接:点击打开链接 题目大意:   有个人想拍n部电影,每部电影限定每周哪几天可以拍 并且必须在第ki周之前把这部电影拍完,问能否拍完n部电影 解题思路:  把每部电影当作一个顶点,源点指向这些顶点,容量为该电影需要拍多少天 然后把每一天都当作顶点,某个工作可以在这天完成就连容量为1大边 每天的顶点指向汇点,容量也为1 最后求出最大流,满流则说明可以完成这些工作 啦啦啦 #include <cstdio> #include <cstring> #include <algo

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

将星期拆点,符合条件的连边,最后统计汇点流量是否满就行了,注意结点编号. #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<set> #include<map> #include<queue> #include<vector> #include<s

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

POJ 1698 Alice's Chance 题目链接 题意:拍n部电影,每部电影要在前w星期完成,并且一周只有一些天是可以拍的,每部电影有个需要的总时间,问是否能拍完电影 思路:源点向每部电影连边,容量为d,然后每部电影对应能拍的那天连边,由于每天容量限制是1,所以进行拆点,然后连向汇点即可 代码: #include <cstdio> #include <cstring> #include <queue> #include <algorithm> usi

poj 1698 Alice&#39;s Chance SAP 最大流

[题意]:Alice有n部电影要拍,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影要拍d天,问爱丽丝能不能拍完所有的电影 [建图]:源点与每部电影连边,容量为天数,每部电影与可以拍该电影的那些天数连边,容量为1,再所有的天数与汇点连边容量为1. 要注意天数和汇点连边的时候不要重复了,我这里用的数组不会出现这种情况. 1 #include<iostream> 2 #include<vector> 3 #include<cstring&g

POJ 1698 Alice&#39;s Chance(网络流+构图)

题目链接:http://poj.org/problem?id=1698 题目: Description Alice, a charming girl, have been dreaming of being a movie star for long. Her chances will come now, for several filmmaking companies invite her to play the chief role in their new films. Unfortuna

poj 3614 Sunscreen 网络流或二分图多重匹配或优先队列

题意: 有C头牛,每头牛有它可以接受的药的最小值和最大值,有L瓶药,每瓶药有一个值u和它最多能给v头牛用,求最多有多少头牛能满足. 分析: 网络流或二分图多重匹配或优先队列,这道题优化了我的dinic模板,原来的模板会TLE... 代码: //poj 3614 //sep9 #include <iostream> #include <queue> #include <algorithm> using namespace std; const int maxN=5005;

POJ 3189--Steady Cow Assignment【二分图多重匹配 &amp;&amp; 最大流求解 &amp;&amp; 枚举 &amp;&amp; 经典】

Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6023   Accepted: 2078 Description Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which, of course, have limited capacity. So