FZU 1202
http://acm.fzu.edu.cn/problem.php?pid=1202
二分图最大匹配,问哪些边是必要的,O(n^3)的方法
删边的时候把连接关系也要删掉,如果在此基础上无法找到增广路,加入答案,恢复连接关系,如果能找到,连接关系不用恢复(因为要n对匹配,这组匹配新的了剩下的要留给别的组)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
int T,M[][],n,linkx[],linky[],vis[],a[],b[] ;
int find(int s)
{
for(int i= ;i<=n ;i++)
{
if(M[s][i])
{
if(vis[i]==T)continue ;
vis[i]=T ;
if(!linky[i] || find(linky[i]))
{
linky[i]=s ;
linkx[s]=i ;
return ;
}
}
}
return ;
}
int max_match()
{
int ans= ;
memset(linkx,,sizeof(linkx)) ;
memset(linky,,sizeof(linky)) ;
memset(vis,,sizeof(vis)) ;
for(int i= ;i<=n ;i++)
{
T=i ;
ans+=find(i);
}
return ans;
}
struct node
{
int first,second ;
}ans[] ;
int cmp(node aa,node bb)
{
if(aa.first==bb.first)return aa.second<bb.second ;
return aa.first<bb.first ;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i= ;i< ;i++)
for(int j= ;j< ;j++)
M[i][j]= ;
while()
{
int xx,yy ;
scanf("%d%d",&xx,&yy) ;
if(!xx && !yy)break ;
M[xx][yy]= ;
}
int res=max_match() ;
if(res!=n)
{
puts("none") ;
putchar('\n') ;
continue ;
}
int st= ;
memset(vis,,sizeof(vis)) ;
for(int i= ;i<=n ;i++)
{
T=i ;
int temp=linkx[i] ;
M[i][temp]= ;
linkx[i]= ;linky[temp]= ;
if(!find(i))
{
ans[st].first=i ;
ans[st++].second=temp ;
linkx[i]=temp ;
linky[temp]=i ;
}
M[i][temp]= ;
}
if(st)
{
sort(ans,ans+st,cmp) ;
for(int i= ;i<st ;i++)
printf("%d %d\n",ans[i].first,ans[i].second) ;
}
else puts("none") ;
putchar('\n') ;
}
return ;
}
FZU 1202的更多相关文章
- FZU 1202 信与信封问题 二分图匹配
找匹配中的关键边. 做法: 拆掉一条匹配边,然后对边两边的点做一次增广,如果可以增广,那么此边不是关键边,否则是关键边. 详情可以参见:http://www.docin.com/p-109868135 ...
- FZU 2137 奇异字符串 后缀树组+RMQ
题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- FZU 2112 并查集、欧拉通路
原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- ACM: FZU 2102 Solve equation - 手速题
FZU 2102 Solve equation Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- ACM: FZU 2110 Star - 数学几何 - 水题
FZU 2110 Star Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Pr ...
随机推荐
- WPF基础学习笔记整理 (七) Binding绑定
基础知识: 数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性:目标对象始终是依赖属性,而源对象则可以是任何内容. BindingOperations类,提供静态 ...
- Sublime Text 3.1.1 Build 3176 注册码破解
在hosts(C:\Windows\System32\drivers\etc)加入如下内容: 127.0.0.1 www.sublimetext.com127.0.0.1 li ...
- 使用R内置函数操作数据框
我们已经学习了数据框的基础,这里回顾一下用于筛选数据框的内置函数.尽管数据框本质上是一个由向量构成的列表,由于各列长度相同,所以可以将其看作矩阵进行访问和操作.选择满足特定条件的行,需要为 [ ] 的 ...
- [原][OSG]深入osg函数----SceneView::cull 函数
参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...
- m_Orchestrate learning system---三十三、公共变量多弄成全局变量
m_Orchestrate learning system---三十三.公共变量多弄成全局变量 一.总结 一句话总结:比如班级id,小组id,这样省事,而且减少数据库的访问,加快访问速度,而且节约代码 ...
- XAML中格式化日期
要求被格式化数据的类型是DateTime StringFormat='yyyy-MM-dd' StringFormat={}{0:yyyy-MM-dd}
- English trip -- VC(情景课)8 C
MP review: 音标(Phonetic symbol) [ɪ] lit adj. 照亮的,点着的(light的过去式及过去分词)n. (Lit)人名:(瑞典)利特:(老)李 [ʊ] g ...
- java克隆机制
看了下面博客就很明白了 http://www.cnblogs.com/Qian123/p/5710533.html#_label0 java对象创建方式有三种: 1.通过new对象 2.通过java克 ...
- codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)
题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费? 用数组arr1[i]记录在第i天人到齐的最小花费.arr2[i]记录第i天之后才有人开始走的最小花费.然后取a ...
- mysql语句查询时间检测
explain的使用 1.首先我们是要登入你的mysql的,然后选择数据库输入:use 你要选择的库名 2执行语句 eg: explain SELECT * FROM wish_orders1412 ...