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 ...
随机推荐
- codeforces 713B B. Searching Rectangles(二分)
题目链接: B. Searching Rectangles time limit per test 1 second memory limit per test 256 megabytes input ...
- POJ 1269 Intersecting Lines【判断直线相交】
题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...
- 移动App崩溃测试用例设计
我们的日常生活中对移动设备越来越多的使用意味着移动App测试这个主题已成为需要考虑的一个无法避免的问题.根据最近的调查研究,用户难以容忍有bug的移动App. 移动App Bug的影响是用户体验差.A ...
- Android开发eclipse运行程序时报timeout的解决方法
eclipse开发Android程序时,忽然莫名其妙报这个错,之前还好好的.忽然就不行了. Failed to install xxx.apk on device~~~: timeout 尝试过手机里 ...
- 自定义WPF ListBox的选中项样式
首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的,SystemColors的HighlightBrushKey和HighlightText ...
- linux patch 格式与说明(收录)
转:http://blog.chinaunix.net/uid-26813001-id-3282954.html 首先介绍一下diff和patch.在这里不会把man在线文档上所有的选项都介绍一下,那 ...
- MySQL数据备份小结
一 MySQL备份恢复总结: 1,备份所有库 2,分库备份 3,备份某库中的某表 4,备份某库中的多个表 5,分表备份 6,只备份表结构 7,只备份数据 二 MySQL备份恢复参数总结: -A 备份所 ...
- 将Log4net的配置配置到的独立文件中
本文转载:http://blog.csdn.net/wanzhuan2010/article/details/7587780 另外一篇博客:http://grim1980.blog.sohu.com/ ...
- An Introduction to Interactive Programming in Python (Part 1) -- Week 2_3 练习
Mini-project description - Rock-paper-scissors-lizard-Spock Rock-paper-scissors is a hand game that ...
- JS 之DOM对象(2)
http://www.cnblogs.com/zourong/p/4792394.html 这篇文件介绍了DOM1中的一些属性和方法,下面的内容主要介绍DOM2和DOM3中新增的内容. 框架的变化 框 ...