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二分匹配的更多相关文章

  1. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. BZOJ 1189 二分匹配 || 最大流

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1155  Solved: 420[Submi ...

  4. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  5. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  6. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  7. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  8. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

  9. UVA5874 Social Holidaying 二分匹配

    二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...

随机推荐

  1. 2016.6.12 codevs搜索练习

    1.codevs 3143 二叉树的序遍历 /*只要把输出根节点的位置调换一下就可以了*/ #include<iostream> using namespace std; #include ...

  2. codeforces 709C C. Letters Cyclic Shift(贪心)

    题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...

  3. java 21 - 9 复制图片的4种方式

    需求:复制图片 分析: 因为图片我们用记事本打开后无法读懂,所以用字节流 并且字节流复制有4种方式,所以我们尝试4种方式. 推荐第四种:缓冲字节流一次读取一个字节数组 首先写main方法: publi ...

  4. css 字体不撑开默认块级元素问题

    问题原因是行高的元素没有随字体大小而改变,设置line-hight属性和字体同时变换

  5. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  6. [py]导入模块3种方法

        import os <--通过os.system()引用 from os import * <---直接system()引用,不建议使用 from os import argv i ...

  7. C语言 位运算

    1G=1024M; 1M=102KB; 1KB=1024B(字节); 1B=8bits(位); #include<stdio.h> #include<stdlib.h> //C ...

  8. C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)

    既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞 ...

  9. Winform调用百度地图接口

    using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using ...

  10. 如何在高并发分布式系统中生成全局唯一Id(转)

    http://www.cnblogs.com/heyuquan/p/global-guid-identity-maxId.html 又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文, ...