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. At least one object must implement IComparable

    中文:必须至少有一个对象实现 IComparable. 序列排序时报这个错误 lstReports.OrderBy(r => new { r.DepartmentName, r.ReportNo ...

  2. 这一路走来,冷暖自知 (附算法demos)

    最近半年多,除了“一键修图”算法之外我还做了其他什么算法? 1.实时单图HDR算法(颜色矫正,智能曝光) 2.多图曝光融合HDR算法(最高支持八百万像素左右) 3.模拟热能探测算法 4.防伪探测算法 ...

  3. js验证表单

    在日常生活中,对于上班时间比较灵活的单位来说,如何能够及时.准确地令公司员工了解自己的上班时间是一个棘手的问题.公司管理人员不会一个挨一个地打电话通知,难免总有员工会弄错自己的上班时间.这样,可以求助 ...

  4. python中property干什么用的?

    先来段官方文档压压惊.. property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget i ...

  5. POJ 3304 Segments【叉积】

    题意:有n条线段,问有没有一条直线使得所有线段在这条直线上的投影至少有一个共同点. 思路:逆向思维,很明显这个问题可以转化为是否有一条直线穿过所有线段,若有,问题要求的直线与该直线垂直,并且公共点为垂 ...

  6. AC日记——积木大赛 洛谷 P1969

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  7. 导航(NavanavigationController)push和pop

    //跳转到指定的控制器 for (UIViewController *Vc in self.navigationController.viewControllers) { if ([Vc isKind ...

  8. 【转】【MySQL】SQLSTATE详解

    根据 X/Open 和 SQL Access Group SQL CAE 规范 (1992) 所进行的定义,SQLERROR 返回 SQLSTATE 值.SQLSTATE 值是包含五个字符的字符串 . ...

  9. 实战:ADFS3.0单点登录系列-总览

    本系列将以一个实际项目为背景,介绍如何使用ADFS3.0实现SSO.其中包括SharePoint,MVC,Exchange等应用程序的SSO集成. 整个系列将会由如下几个部分构成: 实战:ADFS3. ...

  10. 客户端缓存(Client Cache)

    通常在服务器端大家都已经做了很多缓存的工作,ASP.NET CACHE也好MemeryCache也好却总是忽略了客户端缓存. 因为大家都知道不管哪个client都会缓存已经访问过的站点,但是浏览器缓存 ...