FZU 1202 信与信封问题 二分图匹配
找匹配中的关键边。
做法: 拆掉一条匹配边,然后对边两边的点做一次增广,如果可以增广,那么此边不是关键边,否则是关键边。
详情可以参见:http://www.docin.com/p-109868135.html
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <time.h> using namespace std; const int INF = <<;
const int MAXN = ; bool Matrix[MAXN][MAXN];
int n; int mX[MAXN], mY[MAXN], visX[MAXN], visY[MAXN]; bool dfs(int u) {
visX[u] = true;
for (int v = ; v <= n; v++) if (!Matrix[u][v] && !visY[v]) {
visY[v] = true;
if (mY[v]< || dfs(mY[v])) {
mY[v] = u;
mX[u] = v;
return true;
}
}
return false;
} void input() {
memset(Matrix, false, sizeof(Matrix));
int x, y;
while (scanf("%d%d", &x, &y)!=EOF && (x!=||y!=)) {
Matrix[x][y] = true;
}
} void solve() {
int Max;
memset(mX, -, sizeof(mX));
memset(mY, -, sizeof(mY));
for (int i = ; i <= n; i++) {
memset(visX, false, sizeof(visX));
memset(visY, false, sizeof(visY));
if (dfs(i)) Max++;
}
if (Max<n) {
puts("none");
return ;
}
bool flag = true;
int delX, delY;
for (int i = ; i <= n; i++) {
delX = i; delY = mX[i];
mX[delX] = mY[delY] = -;
Matrix[delX][delY] = true;
memset(visX, false, sizeof(visX));
memset(visY, false, sizeof(visY)); if (!dfs(i)) {
printf("%d %d\n", delX, delY);
mX[delX] = delY; mY[delY] = delX;
flag = false;
}
Matrix[delX][delY] = false;
}
if (flag) puts("none");
} int main() {
#ifdef Phantom01
freopen("FZU1202.txt", "r", stdin);
#endif //Phanaom01 while (scanf("%d", &n)!=EOF) {
input();
solve();
puts("");
} return ;
}
FZU 1202
FZU 1202 信与信封问题 二分图匹配的更多相关文章
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- codevs 1222 信与信封问题(二分图的完美匹配)
1222 信与信封问题 题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封. ...
- 【wikioi】1222 信与信封问题(二分图+特殊的技巧)
http://wikioi.com/problem/1222/ 一开始我就想到这样构图的,即可能的连边.但是似乎无法判断. 然后想来想去想不出来.. 题解: 同样是二分图,将可能的连边,然后跑一次最大 ...
- FZU - 2039 Pets (二分图匹配 2011年全国大学生程序设计邀请赛(福州))
Description Are you interested in pets? There is a very famous pets shop in the center of the ACM ci ...
- WIKIOI 1222信与信封问题
题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...
- 信与信封问题(codevs 1222)
题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...
- codevs1222 信与信封问题
1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description John先生晚上写了n封信,并相应地写了 ...
- UVA 12549 - 二分图匹配
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...
- POJ 1274 裸二分图匹配
题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...
随机推荐
- yaml文件结构
VERSION: 1.0.0.1 --指定控制文件schema的版本DATABASE: db_name --指定连接数据库的名字,如果没有指定,由环境变量$P ...
- POJ 3273 Monthly Expense 【二分答案】
题意:给出n天的花费,需要将这n天的花费分成m组,使得每份的和尽量小,求出这个最小的和 看题目看了好久不懂题意,最后还是看了题解 二分答案,上界为这n天花费的总和,下界为这n天里面花费最多的那一天 如 ...
- swift语言点评二十一-协议
定义有什么,及哪些必须实现. A protocol defines a blueprint of methods, properties, and other requirements that su ...
- SpringCloud学习笔记(15)----Spring Cloud Netflix之Hystrix Dashboard的使用
1. 引入依赖 在前面几节中的消费者中添加pom依赖. <dependency> <groupId>org.springframework.cloud</groupId& ...
- ZBrush实用插件ZAppLink简介
ZAppLink是ZBrush版本推出时被评为最值得期待的插件.事实证明,ZAppLink的出现让工具与工具之间有了交流,搭起软件与软件的沟通桥梁. ZAppLink插件专用于扩展ZBrush®的绘制 ...
- 关于PY的推导式
列表推导式: In [26]: [i*2 for i in range(10)] Out[26]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 字典推导式: In [29] ...
- Pimple相关的源码
已经有了非常好的Pimple的相关解析,建议先看下:Pimple - 一个简单的 PHP 依赖注入容器读 PHP - Pimple 源码笔记(上)读 PHP - Pimple 源码笔记(下) 这里通过 ...
- js img图片加载失败,重新加载+断网检查
我们常常会遇到img加载图片的时候因为网络问题或者图片过大导致图片加载失败的问题,页面就因为这张蹦掉的图变得不美观.所以我们需要图片加载失败的时候重新加载图片,前端图片加载优化 //js方法定义 fu ...
- C语言计算字符串数组中每个字符串出现的个数
unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ...
- 作为一个程序员怎么通过android开发赚钱
上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...