题目: http://codevs.cn/problem/1222/

1222 信与信封问题 

 时间限制: 1 s 
 空间限制: 128000 KB 
 题目等级 : 钻石 Diamond
 查看运行结果
 
 
题目描述 Description

John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出。但是,第二天John的儿子Small John将这n封信都拿出了信封。不幸的是,Small John无法将拿出的信正确地装回信封中了。

将Small John所提供的n封信依次编号为1,2,…,n;且n个信封也依次编号为1,2,…,n。假定Small John能提供一组信息:第i封信肯定不是装在信封j中。请编程帮助Small John,尽可能多地将信正确地装回信封。

输入描述 Input Description

n文件的第一行是一个整数n(n≤100)。信和信封依次编号为1,2,…,n。

n接下来的各行中每行有2个数i和j,表示第i封信肯定不是装在第j个信封中。文件最后一行是2个0,表示结束。

输出描述 Output Description

输出文件的各行中每行有2个数i和j,表示第i封信肯定是装在第j个信封中。请按信的编号i从小到大顺序输出。若不能确定正确装入信封的任何信件,则输出“none”。

样例输入 Sample Input

3

1  2

1  3

2  1

0  0

样例输出 Sample Output

1   1

数据范围及提示 Data Size & Hint
 

分类标签 Tags 点此展开

题解:

二分图匹配+匈牙利算法

先跑二分图,判断能匹配的个数,如果不足n个,直接输出无解。然后依次删除每一条匹配好的边,判断剩余的图中能否时这条被删的匹配边的两个端点连接,若不能找到增广路,则这条边时必须保留的,输出这条边。如果一条边都没有输出,则输出无解。

程序中:

BF[i] 为 第i个信封对应第BF[i]个信

BF1[i] 为 第i个信对应第BF1[i]个信封

f[i][j] 为 第i个信可能装到第j个信封中

这道题要用BF1[]的原因是,题目要求按信的从小到大的顺序输出。每次删边时必须用BF1[]。

 #include<bits/stdc++.h>
using namespace std;
int n,BF[],BF1[];
bool f[][];
bitset<> vis;
int Xyl(int x)
{
int i;
for(i=;i<=n;i++)
{
if(f[x][i]==false&&vis[i]==)
{
vis[i]=;
if(Xyl(BF[i])==||BF[i]==)//BF[i]为第i个信封对应第BF[i]个信,但f[i][j]为第i个信对应第j个信封,所以要存BF1[].
{
BF[i]=x;
BF1[x]=i;
return ;
}
}
}
return ;
}
int main()
{
int i,ans,U,V,tmp,tmp1,pd=;
scanf("%d",&n);
while()
{
scanf("%d %d",&U,&V);if(U==&&V==)break;
f[U][V]=true;
}
ans=;
memset(BF,,sizeof(BF));
for(i=;i<=n;i++)
{
vis.reset();
ans+=Xyl(i);
}
if(ans!=n)printf("none");
else
{
for(i=;i<=n;i++)
{
//if(BF[i]!=0)
{
V=BF1[i];
f[i][V]=true;
BF1[i]=;BF[V]=;
vis.reset();
if(Xyl(i)==){printf("%d %d\n",i,V);pd=;BF1[i]=V;BF[V]=i;}
//BF[i]=tmp;
f[i][V]=false;
}
}
if(pd==)printf("none");
}
return ;
}

Codevs 1222 信与信封问题 二分图匹配,匈牙利算法的更多相关文章

  1. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  2. USACO 4.2 The Perfect Stall(二分图匹配匈牙利算法)

    The Perfect StallHal Burch Farmer John completed his new barn just last week, complete with all the ...

  3. codevs 1222 信与信封问题(二分图的完美匹配)

    1222 信与信封问题   题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封. ...

  4. BZOJ1433 [ZJOI2009]假期的宿舍 二分图匹配 匈牙利算法

    原文链接http://www.cnblogs.com/zhouzhendong/p/8372785.html 题目传送门 - BZOJ1433 题解 我们理一理题目. 在校的学生,有自己的床,还可以睡 ...

  5. HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色

    原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1 ...

  6. (转)二分图匹配匈牙利算法与KM算法

    匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...

  7. BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...

  8. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  9. 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩 ...

随机推荐

  1. php中utf8 与utf-8 与utf8 无BOM

    utf8 与utf-8 相信很多程序员刚开始也会有这样的疑惑,如题,我也是.    其实,他们可以这样来区分.    一.在php和html中设置编码,请尽量统一写成“UTF-8”,这才是标准写法,而 ...

  2. ios阻止锁屏 --老代码,供参考

    // Disable the idle timer [[UIApplication sharedApplication] setIdleTimerDisabled: YES];    // Or fo ...

  3. C#<热血传奇>服务端源代码再次给力更新

    前段时间一直在忙公司项目,最近抽点空稍微把部分代码重新整理一下(代码太久没碰很多地方都忘记了 囧~~~) 此次还是更新服务端,并修正上一版里面存在的很多指针 异常BUG...  (代码比较烂,还请各位 ...

  4. 记录android学习、开发过程温故知新

    记录android学习.开发过程温故知新

  5. 基于jQuery的上下左右无缝滚动应用(单行或多行)

    $(function(){     var _wrap=$('ul.line');//定义滚动区域     var _interval=2000;//定义滚动间隙时间     var _moving; ...

  6. 关于SQL语句中SUM函数返回NULL的解决办法

    SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL. 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如 ...

  7. PYTHON的CGIServer的进化

    按例程,一步一步理解如何从SOCKET,TCP,HTTP,CGIHTTP进化的. 最终,静态文件和脚本分享,且能处理FORM提交和展示. 下一步,到数据库??:) A,SOCKET #HTTPserv ...

  8. java Class的Long id初始化 为0的问题android数据库操做出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

    java的class中的Long类型变量调用默认的 构造函数new后会被初始化为0. 这句话大家可能感觉这么低级的事情还用你说? 我想说的是这个会产生的一个应用场景 和 避免方法 场景:db插入时候p ...

  9. 使用Code first 进行更新数据库结构(数据迁移)

    CodeFirst 背景  code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会 ...

  10. Java:JXL解析Excel文件

    项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...