蒟蒻匈牙利50pt求助
查看原帖
蒟蒻匈牙利50pt求助
115252
Ciallos楼主2022/10/18 18:35
#include <bits/stdc++.h>
using namespace std;
vector <int> g[55];
int sch[55],lea[55],t[55],m[55];
int f[55][55],per[55],bed[55];
int find(int k) {
	for (int i=0; i<g[k].size(); i++) {
		int j=g[k][i];
		if (t[j]==0) {
			t[j]=1;
			if (m[j]==0||find(m[j])==1) {
				m[j]=k;
				return 1;
			}
		}
	}
	return 0;
}

int main () {
	int l,n,i,j,p=0,q=0,ans;
	cin>>l;
	while (l>0) {
		cin>>n;
		p=0,q=0,ans=0;
		memset(m,0,sizeof(m));
		for (i=0; i<=502; i++) {
			g[i].clear();
		}
		for (i=1; i<=n; i++) {
			cin>>sch[i];
			if (sch[i]==0) {
				per[++p]=i;
			}
		}
		for (i=1; i<=n; i++) {
			cin>>lea[i];
			if (sch[i]==1&&lea[i]==1) {
				bed[++q]=i;
			}
		}
		for (i=1; i<=n; i++) {
			for (j=1; j<=n; j++) {
				cin>>f[i][j];
			}
		}
		for (i=1; i<=n; i++) {
			if (sch[i]==1&&lea[i]==0) {
				per[++p]=i;
				bed[++q]=i;
			}
		}
		if (p>q) {
			cout<<"T_T"<<endl;
		} else {
			for (i=1; i<=p; i++) {
				for (j=1; j<=q; j++) {
					if (f[per[i]][bed[j]]==1||per[i]==bed[j]) {
						g[per[i]].push_back(bed[j]);
					}
				}
			}
			for (i=1; i<=p; i++) {
				if (find(per[i])==1) {
				    memset(t,0,sizeof(t));
					ans++;
				}
			}
			if (ans==p) {
				cout<<"^_^"<<endl;
			} else {
				cout<<"T_T"<<endl;
			}
		}
		l--;
	}
	return 0;
}
2022/10/18 18:35
加载中...