LibreOJ 6004 圆桌聚餐 (最大流)


题解:天啊,这道最大流真是水的一批……只需要每张桌子向每个单位建一条容量为1的边,源点向桌子建边,容量为桌子能坐的人数;单位向汇点建边,容量为单位人数即可,然后根据单位与桌子的连边值是否为一来了解每个单位配对的桌子即可
代码如下:
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std; int head[],next[],w[],v[],deep[],cur[];
int n,m,s,t,cnt; int init()
{
cnt=-;
memset(head,-,sizeof(head));
memset(next,-,sizeof(next));
} void add(int from,int to,int cost)
{
cnt++;
next[cnt]=head[from];
w[cnt]=cost;
v[cnt]=to;
head[from]=cnt;
} void add_edge(int from,int to,int cost)
{
add(from,to,cost);
add(to,from,);
} int bfs(int s,int t)
{
queue<int> q;
memset(deep,,sizeof(deep));
deep[s]=;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-;i=next[i])
{
if(w[i]>&&!(deep[v[i]]))
{
deep[v[i]]=deep[u]+;
q.push(v[i]);
}
}
}
if(!deep[t])
{
return ;
}
return ;
} int dfs(int u,int t,int dist)
{
if(u==t)
{
return dist;
}
for(int &i=cur[u];i!=-;i=next[i])
{
if(deep[v[i]]==deep[u]+&&w[i]!=)
{
int di=dfs(v[i],t,min(dist,w[i]));
if(di>)
{
w[i]-=di;
w[i^]+=di;
return di;
}
}
}
return ;
} int dinic(int s,int t)
{
int res=;
while(bfs(s,t))
{
for(int i=s;i<=t;i++)
{
cur[i]=head[i];
}
while(int di=dfs(s,t,inf))
{
res+=di;
}
}
return res;
} int main()
{
int a[],b[],sum=;
vector<int> g[];
scanf("%d%d",&m,&n);
init();
s=;t=n+m+;
for(int i=;i<=m;i++)
{
scanf("%d",&a[i]);
add_edge(i+n,t,a[i]);
sum+=a[i]; }
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
add_edge(s,i,b[i]);
for(int j=;j<=m;j++)
{
add_edge(i,j+n,);
}
}
int ans=dinic(s,t);
if(ans==sum)
{
puts("");
}
else
{
puts("");
return ;
}
for(int i=head[t];i!=-;i=next[i])
{
for(int j=head[v[i]];j!=-;j=next[j])
{
if(w[j]&&v[j]!=t)
{
g[v[i]-n].push_back(v[j]);
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<g[i].size();j++)
{
printf("%d ",g[i][j]);
}
printf("\n");
}
}
LibreOJ 6004 圆桌聚餐 (最大流)的更多相关文章
- [LOJ 6004] 圆桌聚餐
link 其实网络流就是再考你如何去建边. 先见$S$,$T$为源点与汇点,然后将$S$连向每一个单位,流量为每个单位的人数,然后将每一个单位连向每一个餐桌,流量为$1$,最后在将每一个餐桌与$T$相 ...
- LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流)
Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流) Description 假设有来自n个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri.会议餐厅共有m张餐桌,每张餐桌 ...
- AC日记——圆桌聚餐 cogs 729
729. [网络流24题] 圆桌聚餐 ★★ 输入文件:roundtable.in 输出文件:roundtable.out 评测插件时间限制:1 s 内存限制:128 MB «问题描述: ...
- Cogs 729. [网络流24题] 圆桌聚餐
[网络流24题] 圆桌聚餐 ★★ 输入文件:roundtable.in 输出文件:roundtable.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设有来自m 个不同单 ...
- 【PowerOJ1740&网络流24题 圆桌聚餐】(最大流)
题意: 来自n个不同国家的代表开会,每个国家代表数为ci 会场有m张圆桌,每张桌子可容纳mi人 不希望有同一个国家的代表在同一张桌子上就餐 设计一个合法方案 (n,m<=300) 思路:最大流, ...
- 【刷题】LOJ 6004 「网络流 24 题」圆桌聚餐
题目描述 假设有来自 \(n\) 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 \(r_i\) .会议餐厅共有 \(m\) 张餐桌,每张餐桌可容纳 \(c_i\) 个代表就餐. 为了使 ...
- 【PowerOJ1740&网络流24题】圆桌聚餐(最大流)
题意: 来自n个不同国家的代表开会,每个国家代表数为ci 会场有m张圆桌,每张桌子可容纳mi人 不希望有同一个国家的代表在同一张桌子上就餐 设计一个合法方案 (n,m<=300) 思路:最大流, ...
- [cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]
建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量. #include <iostream> #include <algorithm ...
随机推荐
- Java 引用类型变量的声明和使用
引用类型变量的声明和使用 (1)把类名当作是一种类型来声明变量,这种变量叫引用类型变量.如:People people; (2)引用类型变量保存对象的“引用”,即对象的地址. (3)对象的创建 new ...
- 关于ListView和GridView的应用
这两篇博文分别讲的很好: ListView: http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html GridViw: htt ...
- Java-Runoob-高级教程:Java 9 新特性
ylbtech-Java-Runoob-高级教程:Java 9 新特性 1.返回顶部 1. Java 9 新特性 Java 9 发布于 2017 年 9 月 22 日,带来了很多新特性,其中最主要的变 ...
- chrome打开新标签页插件
标签(空格分隔): 日常办公,chrome浏览器 一直被chrome浏览器打开新标签页困扰,每次点开一个新标签页还要再去点一下主页,才能打开搜索页面.如果直接点击主页,又会把当前的页面刷掉,实在是非常 ...
- 1032 Sharing
题意:寻找两个链表的首个公共结点,输出其地址. 思路: 方法1. 如果LinkList1比LinkList2长,则让LinkList1先偏移(len1-len2)个结点,然后,让两个链表的的工作指针 ...
- thinkphp中的_initialize方法
子类的_initialize方法自动调用父类的_initialize方法.而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct( ...
- Linux学习笔记 -- 系统目录结构
以root用户登录系统后,在当前命令窗口下输入命令: ls / 我们可以看到目录结构类似下图: 树状目录结构可以表示为: 解析: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令 ...
- 静态实现AOP(翻译自MSDN)
在.net实现AOP 本文通过一个简单的例子实现静态AOP.改例子主要实现客户的增删改查,突然有一天你的老板需要在程序上跟踪每个方法操作的运行日志. 主要分为5个步骤. 第一步:创建接口IReposi ...
- BurpSuite—-decoder模块(编码模块)
一.简介 Burp Decoder是Burp Suite中一款编码解码工具,将原始数据转换成各种编码和哈希表的简单工具,它能够智能地识别多种编码格式采用启发式技术. 二.模块说明 通过有请求的任意模块 ...
- Python基础学习六 操作MySQL
python操作数据库,需要先安装模块 1.下载MySQL.Redis模块 2.解压后,在当前目录执行 python setup.py install 3.或是pycharm直接选择安装 import ...