标签:ble sizeof int 二分图 zjoi2007 print etc ace for
把行和列看成二分图的两个点集
目标是要让每行每列都匹配
显然更改行和列不会影响匹配的结果
即行和列最大匹配为N时一定满足
#include<bits/stdc++.h> using namespace std; const int MAXN = 500 + 10; inline int read() { int f=1,x=0; char ch; do { ch=getchar(); if(ch==‘-‘) f=-1; }while(ch<‘0‘||ch>‘9‘); do { x=(x<<3)+(x<<1)+ch-‘0‘; ch=getchar(); }while(ch>=‘0‘&&ch<=‘9‘); return f*x; } int t; int n; int g[MAXN][MAXN]; int vis[MAXN]; int li[MAXN]; inline bool dfs(int x) { if(x==0) return 1; for(int i=1;i<=n;i++) { if(g[x][i]&&!vis[i]) { vis[i]=1; if(dfs(li[i])) { li[i]=x; return 1; } } } return 0; } int main() { t=read(); while(t--) { n=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=read(); int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } memset(li,0,sizeof(li)); if(ans==n) printf("Yes\n"); else printf("No\n"); } }
标签:ble sizeof int 二分图 zjoi2007 print etc ace for
原文地址:https://www.cnblogs.com/wlzs1432/p/11240151.html