70分求助
查看原帖
70分求助
794701
wo_hen_la楼主2024/4/21 10:13
#include <bits/stdc++.h>
#define int long long
#define N 55
using namespace std;
int t,n;
int match[N];
bool f,a[N],b[N],vis[N];
vector<int> e[N];
bool dfs(int u)
{
	for(auto v:e[u]){
		if(vis[v]) continue;
		vis[v]=1;
		if(!match[v] || dfs(match[v])){
			match[v]=u;
			return 1;
		}
	}
	return 0;
}
main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++) e[i].clear(),match[i]=0;
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=1;i<=n;i++) cin>>b[i];
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				cin>>f;
				if((a[i] && !b[i] && b[j] && a[j] && f) || (i==j && a[i] && !b[i])){
					e[i].push_back(j);//cout<<j<<" ";
				}
				if(!a[i] && f && a[j]){
					e[i].push_back(j);//cout<<j<<" ";
				}
			}
			//cout<<"\n";
		}
		
		int ans=0,cnt=0;
		for(int i=1;i<=n;i++){
			if(b[i] && a[i]){
				cnt++;
				//cout<<i<<"\n";
				continue;
			}
			memset(vis,0,sizeof(vis));
			if(dfs(i)) ans++;
		}
		//cout<<ans<<" "<<n-cnt<<"\n";
		if(ans==n-cnt) cout<<"^_^\n";
		else cout<<"T_T\n";
	}
	return 0;
}
/*
2
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
*/

2024/4/21 10:13
加载中...