洛谷 P3254 圆桌问题【最大流】
s向所有单位连流量为人数的边,所有饭桌向t连流量为饭桌容量的边,每个单位向每个饭桌连容量为1的边表示这个饭桌只能坐这个单位的一个人。跑dinic如果小于总人数则无解,否则对于每个单位for与它相连、满流、另一端不是s的点则是最终方案
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1000005,inf=1e9;
int n,m,h[N],cnt=1,le[N],sum,s,t;
struct qwe
{
	int ne,to,va;
}e[N<<2];
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
void add(int u,int v,int w)
{
	cnt++;
	e[cnt].ne=h[u];
	e[cnt].to=v;
	e[cnt].va=w;
	h[u]=cnt;
}
void ins(int u,int v,int w)
{
	add(u,v,w);
	add(v,u,0);
}
bool bfs()
{
	queue<int>q;
	memset(le,0,sizeof(le));
	le[s]=1;
	q.push(s);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(int i=h[u];i;i=e[i].ne)
			if(e[i].va>0&&!le[e[i].to])
			{
				le[e[i].to]=le[u]+1;
				q.push(e[i].to);
			}
	}
	return le[t];
}
int dfs(int u,int f)
{
	if(u==t||!f)
		return f;
	int us=0;
	for(int i=h[u];i&&us<f;i=e[i].ne)
		if(e[i].va>0&&le[e[i].to]==le[u]+1)
		{
			int t=dfs(e[i].to,min(f-us,e[i].va));
			e[i].va-=t;
			e[i^1].va+=t;
			us+=t;
		}
	if(!us)
		le[u]=0;
	return us;
}
int dinic()
{
	int re=0;
	while(bfs())
		re+=dfs(s,inf);
	return re;
}
int main()
{
	m=read(),n=read();
	s=0,t=n+m+1;
	for(int i=1;i<=m;i++)
	{
		int x=read();
		sum+=x;
		ins(s,i,x);
	}
	for(int i=1;i<=n;i++)
	{
		int x=read();
		ins(i+m,t,x);
	}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			ins(i,j+m,1);
	if(dinic()<sum)
	{
		puts("0");
		return 0;
	}
	puts("1");
	for(int u=1;u<=m;u++)
	{
		for(int i=h[u];i;i=e[i].ne)
			if(e[i].va==0&&e[i].to!=s)
				printf("%d ",e[i].to-m);
		puts("");
	}
	return 0;
}
洛谷 P3254 圆桌问题【最大流】的更多相关文章
- 洛谷P3254 圆桌问题(最大流)
		题意 $m$个不同单位代表参加会议,第$i$个单位有$r_i$个人 $n$张餐桌,第$i$张可容纳$c_i$个代表就餐 同一个单位的代表需要在不同的餐桌就餐 问是否可行,要求输出方案 Sol 比较zz ... 
- 洛谷P3254 圆桌问题(最大流)
		传送门 一道良心啊……没那么多麻烦了…… 从$S$向所有单位连边,容量为单位人数,从所有桌子向$T$连边,容量为桌子能坐的人数,从每一个单位向所有桌子连边,容量为$1$,然后跑一个最大流,看一看$S$ ... 
- 洛谷 [P3254] 圆桌问题
		简单最大流建图 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ... 
- 洛谷.3254.圆桌问题(最大流ISAP)
		题目链接 日常水题 还是忍不住吐槽这题奇怪的评价 #include <cstdio> #include <cctype> #include <algorithm> ... 
- [洛谷P3254]圆桌问题
		题目大意:有$m$个单位,每个单位有$r_i$个代表,有$n$张餐桌,每张餐桌可容纳$c_i$个代表.要求同一个单位的代表不在同一个餐桌就餐.若可以,输出$1$以及其中一种方案,否则输出$0$ 题解: ... 
- 洛谷P3254 圆桌问题 网络流_二分图
		Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ... 
- Luogu P3254 圆桌问题(最大流)
		P3254 圆桌问题 题面 题目描述 假设有来自 \(m\) 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 \(r_i (i =1,2,--,m)\) . 会议餐厅共有 \(n\) 张餐桌 ... 
- 洛谷.4015.运输问题(SPFA费用流)
		题目链接 嗯..水题 洛谷这网络流二十四题的难度评价真神奇.. #include <queue> #include <cstdio> #include <cctype&g ... 
- [洛谷P3254] [网络流24题] 圆桌游戏
		Description 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri (i =1,2,--,m). 会议餐厅共有n 张餐桌,每张餐桌可容纳ci (i =1,2,--,n) ... 
随机推荐
- Java多线程分析案例
			1. 多线程的创建方式 (1).继承 Thread类:但Thread本质上也是实现了Runnable 接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过 Thread 类的 sta ... 
- apc smart UPS下使用apcupsd注意事项
			公司的apc smart UPS安装有管理卡(似乎是AP-9631),server环境有FreeBSD.Windows Server.Linux(CentOS.Ubuntu) 实际使用中有例如以下问题 ... 
- Android双列滑动表格(双表头不动)
			※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ... 
- XP 系统如何安装.NET Framework4.0
			1 运行CMD,然后输入命令net stop WuAuServ 2 打开C盘的Windows目录,然后找到SoftwareDistribution文件夹改名为SDold. 3 在CMD窗口中输 ... 
- poj 1258 Agri-Net(Prim)(基础)
			Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44487 Accepted: 18173 Descri ... 
- 微信小程序之 Index(仿淘宝分类入口)
			1.逻辑层 index.js //index.js //获取应用实例 const app = getApp() Page({ /** * 页面的初始数据 */ data: { menu: { imgU ... 
- Ubuntu16.04下安装Tensorflow CPU版本(图文详解)
			不多说,直接上干货! 推荐 全网最详细的基于Ubuntu14.04/16.04 + Anaconda2 / Anaconda3 + Python2.7/3.4/3.5/3.6安装Tensorflow详 ... 
- spinlock in linux kernel
			spinlock in linux kernel 作为一种锁机制, spinlock可以制造一段临界区, 同一时刻只有一个线程能进入这个临界区, 从而达到保护数据的目的. semaphore, mut ... 
- conda安装速度慢解决办法
			注意,清华已经撤掉其ananconda源, 下面的方法已经失效,中科大源好像也不行,如果有解决办法烦请评论告诉我. conda config --add channels https://mirror ... 
- ubuntu下,创建ruby环境时出现 checking for Magick-config... no
			解决:sudo apt-get install libmagickcore-dev libmagickwand-dev 
