codevs 1222 信与信封问题
/*
二分图
题目给出的是确定不连通的边
如果我们拿剩下的可能联通也可能不连通的边跑最大匹配
如果不是完美非配 也就是说把所有可能的边都认为是一定的
这样都跑不出来(不能匹配到每个点)那么一定不能确定任何一组
如果是完美匹配 就说明可能有能肯定的组合 接下来我们一条一条的删边
如果删完之后跑出来的不是完美匹配那么这一条边就是肯定的
最后记一下答案 拍一下序 输出就好了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 210
using namespace std;
int n,num,head[maxn],g[maxn][maxn],ans,f[maxn],match[maxn],sum,ei;
struct Ans
{
int x,y;
}an[maxn*maxn];
struct node
{
int u,v,pre;
}e[maxn*maxn];
int cmp(const Ans &a,const Ans &b)
{
return a.x<b.x;
}
int init()
{
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
void Add(int from,int to)
{
num++;
e[num].u=from;
e[num].v=to;
e[num].pre=head[from];
head[from]=num;
}
int Dfs(int k)
{
for(int i=head[k];i;i=e[i].pre)
if(f[e[i].v]==&&i!=ei)
{
f[e[i].v]=;
if(match[e[i].v]==||Dfs(match[e[i].v]))
{
match[e[i].v]=k;
return ;
}
}
return ;
}
int main()
{
n=init();
int u,v;
while()
{
u=init();v=init();
if(u==&&v==)break;
g[u][v]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(g[i][j]==)Add(i,j);
for(int i=;i<=n;i++)
{
memset(f,,sizeof(f));
ans+=Dfs(i);
}
if(ans!=n)
{
printf("none\n");
return ;
}
for(int i=;i<=num;i++)
{
memset(match,,sizeof(match));
ans=;
for(int j=;j<=n;j++)
{
memset(f,,sizeof(f));
ei=i;
ans+=Dfs(j);
}
if(ans!=n)
{
sum++;
an[sum].x=e[i].u;
an[sum].y=e[i].v;
}
}
if(sum==)
{
printf("none\n");
return ;
}
sort(an+,an++sum,cmp);
for(int i=;i<=sum;i++)
printf("%d %d\n",an[i].x,an[i].y);
return ;
}
codevs 1222 信与信封问题的更多相关文章
- 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/ 一开始我就想到这样构图的,即可能的连边.但是似乎无法判断. 然后想来想去想不出来.. 题解: 同样是二分图,将可能的连边,然后跑一次最大 ...
- WIKIOI 1222信与信封问题
题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...
- codevs1222 信与信封问题
1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description John先生晚上写了n封信,并相应地写了 ...
- 信与信封问题(codevs 1222)
题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...
- CODEVS1222 信与信封问题 (匈牙利算法)
先做一遍匈牙利算法.对于已经匹配的边,如果删去之后还能最大匹配数增加,则不符合要求. 一遍匈牙利算法是O(n^3)的,对于每一条边做n次,每次O(n^2),总的复杂度是O(n^3). 注意:不要忘记输 ...
- FZU 1202 信与信封问题 二分图匹配
找匹配中的关键边. 做法: 拆掉一条匹配边,然后对边两边的点做一次增广,如果可以增广,那么此边不是关键边,否则是关键边. 详情可以参见:http://www.docin.com/p-109868135 ...
- codevs1222 信与信封的问题
二分图匹配. 先匹配一次,一定是完美匹配.然后枚举每条边,去掉它,若是不能完美匹配,这条边就必须. #include<cstdio> #include<cstring> #in ...
随机推荐
- Python 基础-python函数
函数 1.def 2.命名 3.函数体 4.return 返回值 def get_return(): a = 1 return a 函数参数有 形参和实参 定义几个形参就 ...
- 项目任务管理(TaskMgr)技术篇
判定是否为枚举型:type.IsEnum 应用原型:如果是枚举返回字符型,如果是其他类型直接返回: object value = pro1.FieldType.IsEnum ? pro1.GetVal ...
- Mysql Explain 详解
Mysql Explain 详解[强烈推荐] Mysql Explain 详解一.语法explain < table_name >例如: explain select * from t3 ...
- jquery如何判断div是否隐藏--useful
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【转】分享II→IV FPGA本人的几个版本电源模块设计的方案
很多人问我FPGA的电源怎么怎么着,当然也有人瞎忽悠乱设计,当然我的设计也不是很完美...这里把我当年第一次设计FPGA,到现在的电源方案,几个演变.分析的过程,给大家讲讲... (1)FPGA电源方 ...
- 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序
本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...
- JVM系列五:JVM监测&工具
JVM系列五:JVM监测&工具[整理中] http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...
- 【HDOJ】3325 Arithmetically Challenged
简单DFS. /* 3325 */ #include <iostream> #include <set> #include <cstdio> #include &l ...
- 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩
使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...
- 算法优化(动态规划):COGS 2009. [USACO Mar09]餐厅清扫
2009. [USACO Mar09]餐厅清扫 ★★☆ 输入文件:cleanup.in 输出文件:cleanup.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...