匈牙利10pt求助
查看原帖
匈牙利10pt求助
361773
lishenghao楼主2022/10/3 10:19
#include<bits/stdc++.h>
#define N 53
using namespace std;
int vt[N],pre[N];
int T,n,ttt;
vector<int>g[N];
bool hung(int cur)
{
	if(vt[cur]==ttt)
		return 0;
	vt[cur]=ttt;
	for(int i=0; i<g[cur].size(); i++)
	{
		int v=g[cur][i];
		if(!pre[v]||hung(pre[v]))
		{
			pre[v]=cur;
			return 1;
		}
	}
	return 0;
}
int sch[N],hom[N],sum;
void build()
{
	int i,j,tmp=0,f;
	sum=0;
	scanf("%d",&n);
	for(i=1; i<=n; i++)
		scanf("%d",sch+i);
	for(i=1; i<=n; i++)
	{
		scanf("%d",hom+i);
		if(sch[i]&&!hom[i])
			g[i].push_back(i);
	}
	for(i=1; i<=n; i++)
		if(!sch[i]||(sch[i]&&!hom[i]))
			++sum;
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
		{
			scanf("%d",&f);
			if(f&&sch[j])g[i].push_back(j);
		}
}
int main()
{
	int i;
	scanf("%d",&T);
	while(T--)
	{
		int cnt=0;
		for(i=1; i<=N-1; i++)
			g[i].clear();
		memset(vt,0,sizeof(vt));
		memset(pre,0,sizeof(pre));
		memset(hom,0,sizeof(hom));
		memset(sch,0,sizeof(sch));
		build();
		ttt=0;
		for(i=1; i<=n; i++,ttt++)
			if(!sch[i]||(sch[i]&&!hom[i]))
				cnt+=hung(i);
		if(cnt>=sum)
			 printf("^_^");
		else printf("T_T");
		printf("\n");
	}
}
2022/10/3 10:19
加载中...