poj 3894 System Engineer (二分图最大匹配--匈牙利算法)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 507 | Accepted: 217 |
Description
In the general case there are n jobs numbered from 0 to n-1, n servers numbered from n to 2*n-1, and a sequence of job requests. The problem asks to find the maximum number of jobs that can be processed.
Input
jobnumber: (nr_servers) s1 ... snr_servers The program prints the maximum number of jobs that can be processed.
White spaces can occur freely in the input. The input data are correct and terminate with an end of file.
Output
Sample Input
2
0: (1) 2
1: (1) 2
1
0: (1) 1
Sample Output
1
1
Hint
Source
Southeastern European Regional Programming Contest 2009
题意:分配工作。一个工作和一个人一一对应。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; struct edge
{
int to,next;
}e[100000];
int index; bool visit[10010]; //记录v2中的某个点是否被搜索过
int match[10010]; //记录与V2中的点匹配的点的编号
int head[10010];
int m,cnt; //向图中加边,注意加入的是有向边
//u为v的后继节点即v------>u
void addedge(int u,int v)
{
e[index].to=v;
e[index].next=head[u];
head[u]=index;
index++;
} //匈牙利算法(邻接表存图)
bool dfs(int u)
{
int i,v;
for(i=head[u];i;i=e[i].next)
{
v=e[i].to;
if(!visit[v]) //如果节点u与v相邻且未被查找过
{
visit[v]=true; //标记v已查找过
if(match[v]==-1||dfs(match[v])) //如果v未在前一个匹配M中,或者v在匹配M中,但是
{ //从与v相邻的节点出发可以有增广路径
match[v]=u; //记录查找成功,更新匹配即"取反"
return true; //返回查找成功。
}
}
}
return false;
} void init()
{
int aa,k,bb,i;
memset(head,0,sizeof(head)); //切记要初始化
memset(e,0,sizeof(e));
index=1;
for(i=1;i<=m;i++)
{
scanf("%d: (%d)",&aa,&k);
//printf("ok: %d %d\n",aa,k);
while(k--)
{
scanf("%d",&bb);
bb=bb-cnt+1;
addedge(bb,aa+1);
}
}
} int main()
{
int i;
while(scanf("%d",&cnt)!=EOF)
{
m=cnt;
init();
int ans=0;
memset(match,-1,sizeof(match));
for(i=1;i<=cnt;i++)
{
memset(visit,0,sizeof(visit)); //清空上次搜索时的标记
if(dfs(i)) //从i节点尝试扩展
ans++;
}
printf("%d\n",ans);
}
return 0;
}
poj 3894 System Engineer (二分图最大匹配--匈牙利算法)的更多相关文章
- poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)
http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利 ...
- 二分图最大匹配(匈牙利算法) POJ 3041 Asteroids
题目传送门 /* 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 趣味入门:http:// ...
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include ...
- UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法
二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...
- Ural1109_Conference(二分图最大匹配/匈牙利算法/网络最大流)
解题报告 二分图第一题. 题目描写叙述: 为了參加即将召开的会议,A国派出M位代表,B国派出N位代表,(N,M<=1000) 会议召开前,选出K队代表,每对代表必须一个是A国的,一个是B国的; ...
- HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU1068 (二分图最大匹配匈牙利算法)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU - 1045 Fire Net (二分图最大匹配-匈牙利算法)
(点击此处查看原题) 匈牙利算法简介 个人认为这个算法是一种贪心+暴力的算法,对于二分图的两部X和Y,记x为X部一点,y为Y部一点,我们枚举X的每个点x,如果Y部存在匹配的点y并且y没有被其他的x匹配 ...
- 51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法
2006 飞行员配对(二分图最大匹配) 题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 第二次世界大战时期,英国皇家空军从沦陷国 ...
随机推荐
- Atitit.软件guibuttonand面板---os区-----linux windows搜索文件 目录
Atitit.软件guibuttonand面板---os区-----搜索文件 1. Find 1 2. 寻找文件夹 1 3. 2. Locate// everything 1 4. 3. Wherei ...
- Android应用程序消息处理机制(Looper、Handler)分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6817933 Android应用程序是通过消息来 ...
- 智能路由——ESB
SOA之我见 SOA已然是企业级开发的必定之路.有人会问:我们有了OOP,还须要SOA吗?好吧我承认,这个问题也困扰了我非常久.现现在我得出的结论是:OOP是OOP,SOA是SOA. OOP是指面向对 ...
- 8.0 BOM对象
主要的掌握的知识结构图 1 Window 2 控制窗口.框架.弹出窗口 3 利用location对象中的页面信息 4 使用 navigator 对象了解浏览器 1.1 BOM的核心对象是window, ...
- asp.net UpdatePanel 不能局部刷新问题汇总
1.web.config 配置问题. 关于web.config的配置方面网上有很多资料参考,按照其方法做即可实现. 2.网站 Framework 版本变化造成不能局部刷新问题 版本更新时,会 ...
- asp.net缓存(二)
ASP.NET页面局部缓存 有时缓存整个页面是不现实的,因为页的某些部分可能在每次请求时都需要变化.在这些情况下,只能缓存页的一部分.顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求 ...
- hitTest:withEvent:方法(此方法可实现点击穿透、点击下层视图功能)
此方法可实现点击穿透.点击下层视图功能 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIAppl ...
- Java实现的 线程池
由于最近开始学习java,用到了线程池,按照之前c++的写法写出此java版的线程池 TaskRunnale实现相关任务的接口,具体要实现什么任务在相应的run函数中实现. package threa ...
- [Leetcode] Sort Colors (C++)
题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
- 解决mysql中文存储问题
在mysql安装目录下先找到my.ini,给[mysql]和[mysqld]下的default-character-set赋值为utf8 即改为:default-character-set=utf8 ...