匈牙利算法,70pts求条,WAon#2#3#4
查看原帖
匈牙利算法,70pts求条,WAon#2#3#4
673342
fried_chicken楼主2024/1/5 22:14
#include<bits/stdc++.h>
using namespace std;
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define endl "\n"
#define INF 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,num) memset(a,num,sizeof(a))
#define sort_(a) sort(a+1,a+n+1)
#define sort_cmp(a) sort(a+1,a+n+1,cmp)
#define keep(n) fixed<<setprecision(n)
#define LF putchar('\n')
#define SP putchar(' ')
#define eps 1e-8
#define debug(x) cout<<#x<<'='<<x<<endl;
#define PI acos(-1.0)
#define randint(l,r) rand()%((r)-(l)+1)+(l)
template <typename T>void read(T& x) {x = 0; char ch = getchar();ll f = 1;while (!isdigit(ch)) {if (ch == '-')f *= -1;ch = getchar();} while (isdigit(ch)) {x = x * 10 + ch - 48;ch = getchar();}x *= f;}template <typename T, typename... Args>void read(T& first, Args&... args) {read(first);read(args...);}template <typename T>void write(T arg) {T x = arg;if (x < 0) {putchar('-');x = -x;}if (x > 9) { write(x / 10);} putchar(x % 10 + '0');}template <typename T, typename... Ts>void write(T arg, Ts... args) {write(arg); if (sizeof...(args) != 0) { putchar(' ');write(args...);}}

const int N=505,M=250010;
int n,m,k,a,b,ans;
struct edge {
	int v,ne;
} e[M];
int h[N],idx;
int vis[N],match[N];

void add(int a,int b) {
	e[++idx]= {b,h[a]};
	h[a]=idx;
}
bool dfs(int u) {
	for(int i=h[u]; i; i=e[i].ne) {
		int v=e[i].v;
		if(vis[v]) continue;
		vis[v]=1; 
		if(!match[v]||dfs(match[v])) {
			match[v]=u; 
			return 1;
		}
	}
	return 0;
}
void init(){
	ans=0;
	mem(e,0);mem(match,0);
}
int main() {
	int T;read(T);
	while(T--){
		read(n);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				int x;read(x);
				if(x==1) add(i,j+n);
			}
		}for(int i=1;i<=n;i++){
			mem(vis,0);
			if(dfs(i)) ans++;
		}if(ans>=n) cout<<"Yes\n";
		else cout<<"No\n";
		init();
	}
	return 0;
}
2024/1/5 22:14
加载中...