hdu1507二分匹配
1 //hdu1507 挺不错的题
#include<stdio.h>
#include<string.h>
#define INF 99999999
struct node
{
int x;
int y;
}rem[];
struct Node
{
int v;
int next;
}edge[];
int n,m,num,vis[],match[],map[][],mmark[],index,pre[];
void add(int x,int y)
{
edge[index].v=y;
edge[index].next=pre[x];
pre[x]=index++;
}
void build(int x,int y,int a,int b)
{
int i,j;
if(a<=||a>n||b<=||b>m||map[a][b]==)
return ;
else add(map[x][y],map[a][b]);
}
void test(int x,int y)
{
build(x,y,x-,y);
build(x,y,x+,y);
build(x,y,x,y-);
build(x,y,x,y+);
}
void makemap()
{
int i,j;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
if(map[i][j]==)
continue;
test(i,j);
}
}
int dfs(int u)
{
int i,j;
for(i=pre[u];i!=-;i=edge[i].next)
{
int j=edge[i].v;
if(!vis[j])
{
vis[j]=;
if(match[j]==-||dfs(match[j]))
{
match[j]=u;
return ;
}
}
}
return ;
}
int main()
{
int i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(!n&&!m)break;
scanf("%d",&k);
memset(mmark,,sizeof(mmark));
for(i=;i<=n;i++)
for(j=;j<=m;j++)
map[i][j]=INF; for(i=;i<k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
map[x][y]=;
} num=;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
if(map[i][j])
{
map[i][j]=num;
rem[num].x=i;
rem[num++].y=j;
}
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%d ",map[i][j]);
printf("\n");
}*/
index=;
memset(pre,-,sizeof(pre));
makemap();
/*for(i=1;i<num;i++)
{
for(j=1;j<num;j++)
{
printf("%d ",g[i][j]);
}
printf("\n");
}*/
memset(match,-,sizeof(match));
int ans=;
for(i=;i<num;i++)
{
memset(vis,,sizeof(vis));
if(dfs(i))
ans++;
}
int mark[];
memset(mark,,sizeof(mark));
printf("%d\n",ans/);
for(i=;i<num;i++)
{
if(!mark[i]&&!mark[match[i]]&&match[i]!=-)
{
printf("(%d,%d)--(%d,%d)\n",rem[i].x,rem[i].y,rem[match[i]].x,rem[match[i]].y);
mark[i]=;mark[match[i]]=;
}
}
printf("\n");
}
} /* 3 3
4
2 3
1 3
3 2
1 2
4 5
6
1 2
1 3
3 5
3 4
4 2
2 5 */
hdu1507二分匹配的更多相关文章
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- [kuangbin带你飞]专题十 匹配问题 二分匹配部分
刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...
- BZOJ 1189 二分匹配 || 最大流
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1155 Solved: 420[Submi ...
- Kingdom of Obsession---hdu5943(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...
- poj 2060 Taxi Cab Scheme (二分匹配)
Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5710 Accepted: 2393 D ...
- [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)
Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...
- [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)
描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...
- UVA5874 Social Holidaying 二分匹配
二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...
随机推荐
- UIView.frame的骗局
如果你刚刚开始接触IOS编程, 刚刚接触UIKit, 肯定会被 frame, bounds, center, layer.anchorPoint, layer.position 这些乱七八糟得属性折腾 ...
- c++实现排序(简单插入,希尔,选择,快速,冒泡,堆排)
简单插入排序 适用于记录较少且基本有序的记录.算法思想:给定一个存在分界线的序列,分界线左边有序,右边无序,依次将右边的没排序的数与左边序列进行比较,插入相应位置,再对分界线做出相应调整,下面用图来说 ...
- codeforces 709B B. Checkpoints(水题)
题目链接: B. Checkpoints 题意: 给了n个点,现在给一个起点,问最少访问n-1个点的最小行走距离是多少; 思路: 分情况讨论就好了; AC代码: #include <iostre ...
- 2014 Super Training #4 E Paint the Grid Reloaded --联通块缩点+BFS
原题: ZOJ 3781 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 题意: 给一个n*m的X,O构成的格子,对 ...
- 学习web前端三个月感悟
总结一下自己学习前端三个月的进步和不足: 其实也算机遇,开学时,便有一个PHP培训,只记得当时拿到培训课程的时候,第一感觉就是 好难,什么留言板制作,学生信息系统的制作,navicat和PHP结合使用 ...
- Springmvc返回JSON乱码问号
@RequestMapping(value="/book/getBook.do", produces = "text/html;charset=UTF-8") ...
- work_queue 函数调用栈
init_workqueues ---> create_worker --> kthread_create_on_node
- SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
--开启 Ole Automation Procedures sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO E ...
- Toolbar的使用
项目来源: https://github.com/xuwj/ToolbarDemo#userconsent# 一.V7包升级问题 折腾好久,终于解决 <style name="AppT ...
- [CareerCup] 12.1 Find Mistakes 找程序错误
12.1 Find the mistake(s) in the following code: unsigned int i; ; i >= ; --i) printf("%d\n&q ...