codevs.cn 2776寻找代表元 最大流解法
网址:http://codevs.cn/problem/2776/
题目大意: n个社团,m个人,每个社团可以有一个人担任代表,每个人可以担任多个代表,问最多有多少人是代表。
思路:可以建一个图,然后最大流(废话)。怎么建图?
先膜下神犇 orz QZZ。
样例的图大概是这样的:
图丑就不要在意啦。
s为源点,t为汇点
图中可以看出n个社团与s建一条流量为 1 的边(每个社团只选一个代表,1为限制条件),然后按照读入数据与每个人建一条流量为 1 的边(社团选了这个人就不能选了),最后每个人和t建一条流量为 1 的边。
var dis:array[..]of longint;
flow:array[..,..]of longint;
q:array[..]of longint;
head,tail:longint;
n,m,x,p,z:longint;
i,j:longint;
ans:int64;
procedure bfs;//bfs 分层图
var i:longint;
now:longint;
begin
for i:= to p do
dis[i]:=-;
dis[]:=;
head:=;
tail:=;
q[]:=;
while head<=tail do
begin
now:=q[head];
for i:= to p do
if (flow[now,i]>)and(dis[i]<) then
begin
inc(tail);
q[tail]:=i;
dis[i]:=dis[now]+;
end;
inc(head);
end;
end; function dfs(x,mx:longint):longint;//dfs最小流
var k,i:longint;
begin
if x=p then exit(mx);
for i:= to p do
if (flow[x,i]>)and(dis[i]=dis[x]+) then
begin
if flow[x,i]>mx then k:=dfs(i,mx) else k:=dfs(i,flow[x,i]);
flow[x,i]:=flow[x,i]-k;
flow[i,x]:=flow[i,x]+k;
if k> then exit(k);
end;
exit();
end; begin
read(n,m);
p:=n+m+;//p为总节点数 0 为源点s p 为汇点t
for i:= to n do
begin
x:=;
while x<> do
begin
read(x);
if x<> then flow[i,x+n]:=;//建社团与人数的边,因为不能编号相同,所以 1~n 为社团 n+1~n+m 为人
end;
flow[,i]:=;//建s与社团的边
end;
for i:= to m do
flow[n+i,p]:=;//建人与t的边 i还是要加n 才是人的编号
while true do //最大流
begin
bfs;
if dis[p]< then break;
repeat
z:=dfs(,maxint);
ans:=ans+z;
until z>;
end;
writeln(ans);
end.
C++:
还是没代码,有时间补上。
望原谅。
最大流主要还是建图。然后蒟蒻我又水了一篇博客。
codevs.cn 2776寻找代表元 最大流解法的更多相关文章
- 【codevs】2776寻找代表元
题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验学校一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...
- 匈牙利算法 codevs 2776 寻找代表元
codevs 2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用 ...
- Codevs 2776 寻找代表元(二分图匹配)
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号. 广州二 ...
- codevs 2776 寻找代表元
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验 ...
- 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元
裸的匈牙利,存模板. #include<cstdio> #include<vector> #include<cstring> using namespace std ...
- Codevs2776 寻找代表元
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号 ...
- CJOJ 1943 【重庆八中模拟赛】寻找代表元(二分图最大匹配)
CJOJ 1943 [重庆八中模拟赛]寻找代表元(二分图最大匹配) Description 八中一共有n个社团,分别用1到n编号. 八中一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也 ...
- RQNOJ PID141 / 寻找代表元 [2017年6月计划 二分图01]
PID141 / 寻找代表元 ☆ 提交你的代码 查看讨论和题解 1分前 我的状态 已通过 2017-06-28 21:03:46 运行耗时:31 ms 运行内存:28048 KB 查看最后一次评测记录 ...
- 寻找代表元(codevs 2776)
题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验学校一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...
随机推荐
- ajax 传递数组类型参数后台接收不到的问题
在做排序功能的时候需要将一个数组的数据传递到后台,(当时怎么没用json,如果用json就没有那么多的事情了),数据提交采用ajax! 先看代码 js: submitbtn: function () ...
- freemarker的${!}
${sss!} <#--没有定义这个变量,默认值是空字符串! --> ...................................... 转自:https://blog.csdn ...
- Docker的初体验
这几天捣鼓了一下docker,是真的麻烦啊,网上资料比较杂乱,也很多英文,学起来挺多问题的 Docker下载 win10专业版:开启Hyper-V,下载并安装 docker-for-windows(但 ...
- Python全栈day24-25(面向对象编程)
参考文档: http://www.cnblogs.com/linhaifeng/articles/6182264.html# 类:把一类事物的相同的特征和动作整合到一起就是类,类是抽象的概练 对象:就 ...
- java编程思想 英文版 打卡
计划 2017.3.1 购入 准备花一个月的时间阅读完, 共1500页,最后两章是GUI的内容,只需要到1300页就行了 目的有三: 熟悉java基础 提升英语阅读能力,好久没读英文书籍了 补补oop ...
- python之MySQL学习——数据查询
import pymysql as ps # 打开数据库连接 db = ps.connect(host='localhost', user='root', password='123456', dat ...
- Editplus配置Monokai页面风格
1.找到EditPlus的配置文件editplus_u.ini,用以下代码替换 [Options] Placement=2C00000002000000030000000083FFFF0083FFFF ...
- css中的clear:both,display:flex;
介绍两者一起讨论的原因: 在明天就国庆的日子里陪着程序员的只有代码,啤酒,还有音乐,然后就是灯光下默默陪伴自己的影子.好了,不矫情了. -------------------------------- ...
- telnet --- no route to host solution "iptables -F " in the target machine
telnet --- no route to host solution "iptables -F " in the target machine
- ubuntu微信
方法1 – 使用Snap来安装微信 依次在terminal 执行一下命令 sudo apt install snapd snapd-xdg-open sudo snap install electro ...