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编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...
随机推荐
- GitHub上整理的一些工具【转】
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...
- delphi连接sql server数据库,并根据sql语句查询出数据显示--初级
需要用到四个组件,分别为: 1.ADOConnection1 设置Connectionstring属性(连接串),loginPrompt属性控制是否连接记住了密码: 2.ADOQuery1 设置Con ...
- (转)SPDY
SPDY:Google开发的基于传输控制协议(TCP)的应用层协议,目前已经被用于Google Chrome浏览器中来访问Google的SSL加密服务.SPDY并不是一种用于替代HTTP的协议,而是对 ...
- SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 4)
(六)高效合理的使用LINQ 1.DataContext中的两个属性 为了能够使用DataContext进行数据提交,在DataContext进行数据查询和操作的过程中,内部会进行数据状态的保持和追踪 ...
- jquery刷新页面指定部位
做好好几次了,经常忘记格式,这次记下来 $("#baseInfo").load("/KnowledgeLib/Personalization/QuestionUpdate ...
- flannel源码分析---初始化部分
// main.go 1.func main() ..... 首先调用sm, err := newSubnetManager()创建subnet manager .... 调用ctx, cancel ...
- CSDN2015博客之星评选之拉票环节
最近接到CSDN邀请,参加了CSDN 2015博客之星 的评选活动,下面是给我拉票的链接地址: http://vote.blog.csdn.net/blogstar2015/candidate?use ...
- What are the top 10 things that we should be informed about in life
1.Realize that nobody cares, and if they do, you shouldn't care that they care. Got a new car? Nobod ...
- NoSQL选型及HBase案例详解(转)
从 NOSQL的类型到 常用的产品,我们已经做过很多关于NoSQL的文章,今天我们从国内著名的互联网公司及科研机构的实战谈一下NoSQL数据库. NoSQL一定程度上是基于一个很重要的原理—— CAP ...
- vue-router路由器的使用
一. vue-router路由 1.简介 1.为什么要用vue-router 使用Vue.js开发SPA(Single Page Application)单页面应用 2.什么是单页面应用 根据不同ur ...