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 ...
随机推荐
- Django Admin 简单部署上线
前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...
- Python开发【第一章】:Python简介和入门
Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承. ...
- 用链表解决if语句过多的问题(C/C++实现)
起因 http://www.cnblogs.com/code-style/p/3499408.html 设计模式的解决方案(基于python语言) http://www.cnblogs.com/cod ...
- 一种计算e的方法
原文地址:http://hankjin.blog.163.com/blog/static/3373193720108811316123/ 原理:平均e个(0,1)之间的随机数之和会大于1.原因:n个数 ...
- 用它解决大问题啦,STRACE应用
脚本是沙沙,辉哥和我在去年解决一个PHP时弄出来的...强! 简单而实用. 抓到的TRC文件放在TRC目录下. 如果有异常的进程或输出,可以在里面详细的分析.. #!/bin/bash mkdir t ...
- 【POJ】1035 Spell checker
字典树. #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib ...
- War3Tool dota改键v3.3版
wartool魔兽全屏改键功能:1.支持11平台自定义改建,自动进局域网(同类软件暂时没发现这个功能)2.技能改键,可以有效的切换适合你的技能键3.war3路径扫描,运行本程序一键就能打开war3 ( ...
- 整合apache+tomcat+keepalived实现高可用tomcat集群
Apache是一个强大的Web服务器在处理静态页面.处理大量网络客户请求.支持服务的种类以及可配置方面都有优势,高速并且强壮.但是没有JSP/Servlet的解析能力.整合Apache和Tomcat可 ...
- Delphi 生成excel中的饼图
生成excel中的饼图 var i,j,m,n,count1:integer; str:string; Jdate:tdatetime; channellist,potBstrtime,potEstr ...
- 查看 AndroidManifest.xml文件
1.Manifest Explorer 装在Android手机中,用此apk看系统中已安装应用的AndroidManifest.xml文件: protected boolean configForPa ...