爆零求助
查看原帖
爆零求助
302750
Main_WF楼主2021/7/22 16:56
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100;

int w[maxn][maxn],student[maxn],home[maxn],beder[maxn];
bool vis[maxn];
int t,n;

bool dfs(int u)
{
	for(int i=1;i<=n;i++)
	{
		if(student[i]&&w[u][i]&&!vis[i])
		{
			vis[i]=1;
			if(!beder[i]||dfs(beder[i]))
			{
				beder[i]=u;
				return true;
			}
		}
	}
	return false;
}

void out()
{
	for(int i=1;i<=n;i++)
	{
		if(home[i]!=1)
		{
			memset(vis,0,sizeof(vis));
			if(!dfs(i))
			{
				cout<<"T_T"<<'\n';
				return;
			}
		}	 	
	}
	cout<<"^_^"<<'\n';
}

void reset()
{
	memset(w,0,sizeof(w));
	memset(beder,0,sizeof(beder));
	memset(home,0,sizeof(home));
}

void in()
{
	cin>>n;
	for(int j=1;j<=n;j++)
		cin>>student[j];
	for(int j=1;j<=n;j++)
		cin>>home[j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>w[i][j];
	for(int i=1;i<=n;i++)
		if(student[i])w[i][i]=1;
}

int main()
{
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		
		in();
		out(); 
		reset();
	}
}
2021/7/22 16:56
加载中...