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编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...
随机推荐
- @RequestMapping 注解
@RequestMapping 注解开发者需要在控制器内部为每一个请求动作开发相应的处理方法.org.springframework.web.bind.annotation.RequestMappin ...
- web.xml配置文件详解
笔者从大学毕业一直从事网上银行的开发,都是一些web开发项目.接下来会写一些关于web开发相关的东西,也是自己工作以来经常用到的内容.本篇先从web.xml文件开始介绍,笔者接触到的项目中都有这个文件 ...
- Android studio Unsupported major.minor version 52.0
从目前以及我从网上搜索到的解决方案来说,出现此问题可以从以下两个方法入手: 1. JDK的版本和class版本不一致,通常是jdk版本过低解决方法: 1)使用Java -version和javac - ...
- linux mysql 新增用户 分配权限
insert into mysql.user(Host,User,Password) values("%","admin",password("adm ...
- 【BZOJ1283/3550】序列/[ONTAK2010]Vacation 最大费用流
[BZOJ1283]序列 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和 ...
- MySQL主从不一致修复
场景: 线上正在服务的库由于紧急主从切换导致主从不一致,报错信息如下: Last_Error: Coordinator stopped because there were error(s) in t ...
- FW: AMD, CMD, CommonJS和UMD
javascript 我是豆腐不是渣 4月5日发布 推荐 2 推荐 收藏 32 收藏,486 浏览 今天由于项目中引入的echarts的文件太大,requirejs经常加载超时,不得不分开来加载ech ...
- VS c++ opencv画图
任务:用c++在图片上画线 之前用过python的opencv,所以直接想到了用c++的opencv来画线. 但关键就是VS中如何配置c++ opencv库的问题: vs中opencv库的配置:htt ...
- struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本
[本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...
- Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)
Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...