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 ...
随机推荐
- Axure RP 8.0 Licence
新版本:(比如 Axure RP 8.0.0 3319)Licensee:米 业成 (STUDENT)Key:nFmqBBvEqdvbiUjy8NZiyWiRSg3yO+PtZ8c9wdwxWse4W ...
- python获取文件扩展名的方法
主要介绍了python获取文件扩展名的方法,涉及Python针对文件路径的相关操作技巧 import os.path def file_extension(path): ] print file_ex ...
- Jenkins 对项目持续集成的配置之二 API接口自动化 Ant+Jmeter
先介绍一下Ant+Jmeter 略 我的另一篇文章有讲在linux上部署ant + jmeter以满足CI持续化集成 https://www.cnblogs.com/qianjinyan/p/9067 ...
- spring boot 邮件发送(带附件)
首先开启QQ邮箱的POP.SMTP服务器,获取授权码. 设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 pom.xml需要加载三个ja ...
- 证明: 2^0+2^1+2^2+2^3+.+2^n-1=(2^n)-1
S=2^0+2^1+2^2+2^3+.+2^(n-1)2S=2^1+2^2+2^3+...+2^(n-1)+2^n两式相减,2S-S=2^n-2^0S=2^(n)-1
- 20170503xlVBA房地产数据分类连接
Sub NextSeven_CodeFrame4() Application.ScreenUpdating = False Application.DisplayAlerts = False Appl ...
- android--------微信 Tinker 热修复 (一)
什么是热修复 热修复补丁(hotfix),又称为patch,指能够修复软件漏洞的一些代码,是一种快速.低成本修复产品软件版本缺陷的方式. 热修复有多种,如:Tinker ,QZone,Andfix, ...
- Python解析Wav文件并绘制波形的方法
资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
- django的url的name参数的意义
Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址 ...
- Eclipse 汉化方法
1 打开 http://www.eclipse.org/babel/downloads.php 2 复制 http://download.eclipse.org/technology/babel/u ...