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 ...
随机推荐
- Maven java.lang.OutOfMemeoryError 问题
设置MAVEN_OPTS环境变量的值为:-Xms128m -Xmx512m Java默认的最大可用内存往往不能够满足Maven运行的需要 比如在项目较大时,使用Maven生成项目站点需要占用大量的内存 ...
- Linux——用户管理简单学习笔记(三)
用户组管理命令: groupadd -g 888 webadmin 创建用户组webadmin,其GID为888 删除用户组: groupdel 组名 修改用户组信息 groupmod groupmo ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- MongoDB (课时1,2)
1.数据库之中支持的的SQL语句是由IBM开发出来的,使用并不麻烦,就是几个简单的单词:select, from, where, group by, having, order by.目前最流行的数 ...
- (转)c++一些知识点
异常详解: https://www.cnblogs.com/hdk1993/p/4357541.html#top 模版详解: https://blog.csdn.net/lezardfu/articl ...
- Unity中使用的一套敏感词过滤方式
当项目中的敏感词数量不是很多的时候,直接用数组来遍历过滤其实也可以,但是具体的数量有多大,这个肯定不好说,因此,对.txt中的敏感词合理组织后再进行过滤就显得非常有必要了. 如上图,左边是txt中配置 ...
- Unity如何判断一个对象是不是一件衣服
判断该对象及其子对象上是否有SkinnedMeshRenderer组价即可 public static bool IsCloth(Transform obj) { bool isCloth = fal ...
- 查询ORACLE存储关联表
SELECT DISTINCT * FROM user_sourceWHERE TYPE = 'PROCEDURE'AND upper(text) LIKE '%PS_KL_ABS_002_DATA% ...
- every day a practice —— morning
In 25 years, Panda Express has transformed from a single restaurant in a southern California mall to ...
- Java网络编程和NIO详解8:浅析mmap和Direct Buffer
Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...