/*
二分图
题目给出的是确定不连通的边
如果我们拿剩下的可能联通也可能不连通的边跑最大匹配
如果不是完美非配 也就是说把所有可能的边都认为是一定的
这样都跑不出来(不能匹配到每个点)那么一定不能确定任何一组
如果是完美匹配 就说明可能有能肯定的组合 接下来我们一条一条的删边
如果删完之后跑出来的不是完美匹配那么这一条边就是肯定的
最后记一下答案 拍一下序 输出就好了
*/
#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 信与信封问题的更多相关文章

  1. Codevs 1222 信与信封问题 二分图匹配,匈牙利算法

    题目: http://codevs.cn/problem/1222/ 1222 信与信封问题   时间限制: 1 s   空间限制: 128000 KB   题目等级 : 钻石 Diamond 题解 ...

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

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

  3. 【wikioi】1222 信与信封问题(二分图+特殊的技巧)

    http://wikioi.com/problem/1222/ 一开始我就想到这样构图的,即可能的连边.但是似乎无法判断. 然后想来想去想不出来.. 题解: 同样是二分图,将可能的连边,然后跑一次最大 ...

  4. WIKIOI 1222信与信封问题

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

  5. codevs1222 信与信封问题

    1222 信与信封问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description John先生晚上写了n封信,并相应地写了 ...

  6. 信与信封问题(codevs 1222)

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

  7. CODEVS1222 信与信封问题 (匈牙利算法)

    先做一遍匈牙利算法.对于已经匹配的边,如果删去之后还能最大匹配数增加,则不符合要求. 一遍匈牙利算法是O(n^3)的,对于每一条边做n次,每次O(n^2),总的复杂度是O(n^3). 注意:不要忘记输 ...

  8. FZU 1202 信与信封问题 二分图匹配

    找匹配中的关键边. 做法: 拆掉一条匹配边,然后对边两边的点做一次增广,如果可以增广,那么此边不是关键边,否则是关键边. 详情可以参见:http://www.docin.com/p-109868135 ...

  9. codevs1222 信与信封的问题

    二分图匹配. 先匹配一次,一定是完美匹配.然后枚举每条边,去掉它,若是不能完美匹配,这条边就必须. #include<cstdio> #include<cstring> #in ...

随机推荐

  1. shell条件测试

    文件状态测试-b filename : 当filename 存在并且是块文件时返回真(返回0)-c filename : 当filename 存在并且是字符文件时返回真-d pathname : 当p ...

  2. BZOJ 1067 降雨量

    Description 我们常常会说这样的话:"\(X\)年是自\(Y\)年以来降雨量最多的".它的含义是\(X\)年的降雨量不超过\(Y\)年,且对于任意\(Y<Z< ...

  3. 3.Repeater 绑定数据例子

    此例子绑定的数据源为微软在mssql2000中提供的Northwind数据库中的表Categories. 以下为设计步骤: 在C# 中连接数据库.如下图: 在项目中添加新建项,建立一个数据集,并把Ca ...

  4. Arrays.sort的粗略讲解

    排序算法,基本的高级语言都有一些提供.C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array).用这些排序时,都可以写自己的排序规则. Java API对A ...

  5. Round Numbers (排列组合)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7558   Accepted: 2596 Description The c ...

  6. ZKW费用流修正

    #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc ...

  7. 【效率】FIND

    文档 HTML Flash CSS 字体 命名颜色 工具 IMG

  8. 【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间

    原文网址:http://bbs.eeworld.com.cn/thread-438571-1-1.html /*                         * 通过使用if(gatt==null ...

  9. [工具] Numpy

    虽说功能强大,要什么基本都有,但感觉它提供的功能还不如Matlab好记呢...Anyway,首先import numpy as np 1. 操作基本单元,矩阵 np.array(list) / np. ...

  10. [Java] Map / HashMap - 源代码学习笔记

    Map 1. 用于关联 key 和 value 的对象,其中 key 与 key 之间不能重复. 2. 是一个接口,用来代替 Java 早期版本中的 Dictionary 抽象类. 3. 提供三种不同 ...