[ZJOI2007] 矩阵游戏(二分图匹配)

 

思路:二分图最大匹配 

我们观察矩阵变换的性质,无论如何操作,每行所有的1数量是不变,由于结果要让主对角线为1,转化为每行找一个1使得整个矩阵所有列都存在一个1(每行找一个只后排下序就可以变成目标矩阵 了)。

二分图匹配,显然我们只要看1就行,左边时1所在的行,右边是1所在的列,当每行都能匹配时,即输出"Yes"

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define scd(v) scanf("%d",&v)
#define scdd(a,b) scanf("%d %d",&a,&b)
#define endl "\n"
#define IOS ios::sync_with_stdio(false)
#define pb push_back
#define all(v) v.begin(),v.end()
#define mst(v,a) memset(v,a,sizeof(v))
#define ls p<<1
#define rs p<<1|1
#define int long long
#define inf 0x3f3f3f3f
int n;
char mp[310][310];
vector  G[310];
int biao[310],yuyue[310];
bool dfs(int x)
{for(int i=0 ;i>T;while( T-- ){cin>>n;_for(i,1,n) _for(j,1,n) cin>>mp[i][j];_for(i,1,n){_for(j,1,n){if( mp[i][j] == '1' ){G[i].pb(j);}}}int tot=0;_for(i,1,n){mst(biao,0);if( dfs(i) ){tot++;}}if( tot == n ) cout<<"Yes"<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部