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 ...
随机推荐
- 敬爱的GitHub” —— 致GitHub的一封地下信 英文原文:"Dear GitHub…" An Open Letter to GitHub
敬爱的GitHub” —— 致GitHub的一封地下信 英文原文:"Dear GitHub…" An Open Letter to GitHub 最近,一个由开源名目(包含一些最盛 ...
- codeforces 713C C. Sonya and Problem Wihtout a Legend(dp)
题目链接: C. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 ...
- 第13章 Windows内存体系结构
13.1 Windows的虚拟地址空间安排 13.1.1虚拟地址空间的分区(即虚拟地址空间布局) 进程的地址空间划分 分区 x86 32位 Windows 3GB用户模式下的x86 32位Window ...
- 为VS集成IL环境
为VS2012集成IL工具 在之前的版本VS2010中,在VS的安装目录下/Tools/IL Disassembler这个工具(IL中间语言查看器),但是我想直接把它集成在VS2012里使用, 操作方 ...
- Unity3d+Jenkins 自动编译iOS、Android版本
1.在Unity3d中, 创建导出 iOS.Android 项目脚本 PerformBuild.cs ,放在Editor目录下(必须),如下: using UnityEditor; using Sys ...
- xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题
xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题一直提示密码错误, 什么原因? ------解决方案--------------------改了密码之后,phpmyadmin ...
- WindowXP与WIN7环境安装、破解、配置AppScan8.0
---------------------------------------------------------------------------------------------------- ...
- Contains Duplicate
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- slf4j,log4j,logback 初步使用
log4j,slf4j,logback简单介绍见 LogBack简易教程 Logback浅析 简单的将,slf4j是一个日志的框架,有各种日志的接口,但是并不包含实际的写日志的方法. log4j,lo ...
- Brief introduce to Iometer
<本人原创,纯粹为了练习英文博客的写作.转载请注明出处谢谢!非技术博客 http://shiyanch.lofter.com/ > *:first-child { margin-top: ...