首先如果最大匹配不足$n$个那么显然每条边都不可能在匹配为$n$的方案中。

对于一条边$(u,v)$,如果它可能在最大匹配中,有两种情况:

$1.(u,v)$是当前方案的匹配边。

$2.$可以沿着$(u,v)$进行增广,那么在残余网络中$u$在$v$在一个环中,即属于同一个强连通分量。

因为源点不存在出边,因此只需加入汇点再求SCC即可。

时间复杂度$O(n^3)$。

#include<cstdio>
const int N=1505,M=N*N;
int n,m,T,i,j,b[N],f[N],g[N<<1],v[M],nxt[M],G[N<<1],V[M],NXT[M],ed,vis[N<<1],q[N<<1],t,id[N<<1];char a[N][N];
bool find(int x){
for(int i=1;i<=m;i++)if(!b[i]&&a[x][i]){
b[i]=1;
if(!f[i]||find(f[i]))return f[i]=x,1;
}
return 0;
}
inline void add(int x,int y){
v[++ed]=y;nxt[ed]=g[x];g[x]=ed;
V[ed]=x;NXT[ed]=G[y];G[y]=ed;
}
void dfs1(int x){
vis[x]=1;
for(int i=g[x];i;i=nxt[i])if(!vis[v[i]])dfs1(v[i]);
q[++t]=x;
}
void dfs2(int x,int y){
vis[x]=0;id[x]=y;
for(int i=G[x];i;i=NXT[i])if(vis[V[i]])dfs2(V[i],y);
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)for(scanf("%s",a[i]+1),j=1;j<=m;j++)a[i][j]-='0';
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)b[j]=0;
if(!find(i)){
for(i=1;i<=n;puts(""),i++)for(j=1;j<=m;j++)putchar('1');
return 0;
}
}
T=n+m+1;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(a[i][j])if(f[j]==i)add(j+n,i);else add(i,j+n);
for(i=1;i<=m;i++)if(f[i])add(T,i+n);else add(i+n,T);
for(i=1;i<=T;i++)if(!vis[i])dfs1(i);
for(i=t;i;i--)if(vis[q[i]])dfs2(q[i],q[i]);
for(i=1;i<=n;puts(""),i++)for(j=1;j<=m;j++)if(a[i][j]&&(f[j]==i||id[i]==id[j+n]))putchar('0');else putchar('1');
return 0;
}

  

BZOJ2240 : ural1676 Mortal Combat的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. (转)8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset

    8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset by Jason Brownlee on August ...

  3. 11 Mortal Fibonacci Rabbits

    Problem Figure 4. A figure illustrating the propagation of Fibonacci's rabbits if they die after thr ...

  4. 论文翻译 - Multiagent Bidirectionally-Coordinated Nets Emergence of Human-level Coordination in Learning to Play StarCraft Combat Games

    (缺少一些公式的图或者效果图,评论区有惊喜) (个人学习这篇论文时进行的翻译[谷歌翻译,你懂的],如有侵权等,请告知) Multiagent Bidirectionally-Coordinated N ...

  5. SPOJ COT3 Combat on a tree(Trie树、线段树的合并)

    题目链接:http://www.spoj.com/problems/COT3/ Alice and Bob are playing a game on a tree of n nodes.Each n ...

  6. Combat 战斗任务

    发售年份 1977 平台 VCS 开发商 雅达利(Atari) 类型 射击 https://www.youtube.com/watch?v=2LxPEdUZOkE

  7. SPOJ COT3.Combat on a tree(博弈论 Trie合并)

    题目链接 \(Description\) 给定一棵\(n\)个点的树,每个点是黑色或白色.两个人轮流操作,每次可以选一个白色的点,将它到根节点路径上的所有点染黑.不能操作的人输,求先手是否能赢.如果能 ...

  8. SPOJ COT3 - Combat on a tree

    /* 考虑直接使用暴力来算的话 SG[i]表示以i为根的子树的SG值, 然后考虑枚举删除那个子树节点, 然后求拆成的树的sg异或值, 求mex即可 复杂度三次方 然后考虑尝试 整体来做 发现对于每次子 ...

  9. 北京集训TEST12——PA( Mortal Kombat)

    题目: Description 有一天,有N个外星人企图入侵地球.地球派出全球战斗力最强的M个人代表人类对抗外星人.根据外星的战斗规则,每个外星人应该分别与一名地球人对战(不同的外星人要与不同的地球人 ...

随机推荐

  1. meaven

    一个项目管理工具.java语言编写的,所以可以跨平台 https://mvnrepository.com/

  2. Chrome开发者控制台操作教程

    1清空控制台 在控制台下有个clear console的按钮,点击的时候会清空控制台. 清空控制台  2让Chrome中的页面可编辑 有的时候我们需要临时改变页面上的文字,图案等信息,一种常见的方法是 ...

  3. 20165206 2017-2018-2 《Java程序设计》第七周学习总结

    20165206 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 MySqL:是世界上最流行的开源数据管理系统. 配置启动MySQL. 连接数据库:Conne ...

  4. 下载中间件--随机IP代理以及随机User_Agent

    下载中间件随机IP代理以及随机User_Agent 1.在settings.py中设置开启代理功能 # 设置下载中间件 DOWNLOADER_MIDDLEWARES = { # 随机的 User-Ag ...

  5. C#获取一周的工作日显示(星期几)

    代码如下: gridBandW1.Caption = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName ...

  6. css3三角形冒泡泡图形制作

    图一: 图二: <!DOCTYPE html> <html> <head> <title>css 三角形</title> <style ...

  7. 【BZOJ3697】采药人的路径

    题解: 比较简单的点分治 首先暴力的话直接枚举 然后枚举另一个点的时候顺便看一下有没有零点 n^2 考虑点分治 分治之后用f[i][0/1]表示权值为i,有没有零点的方案数 我们来证明一件事情,如果两 ...

  8. spring security实现动态配置url权限的两种方法

    缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...

  9. python函数式编程——返回函数

    1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 2.闭包 注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还 ...

  10. 通过impala更改Kudu表属性

    开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据.这些属性包括表名, Kudu 主地址列表,以及表是否由 Impala (内部)或外部管理. Rename an Im ...