求助爆零,死活不知道哪里错了
查看原帖
求助爆零,死活不知道哪里错了
381607
Bicer楼主2021/1/11 15:55

为啥错了

#include<bits/stdc++.h>
using namespace std;
bool vis[52];
bool f[52];
int a[52][52];
int lol[52][52];
bool pr[52];
int match[52];
int n,t;
bool dfs(int x){//chuang
	for(int i=1;i<=n;i++){
		if(!pr[i]&&lol[x][i]&&vis[i]){
			pr[i]=true;
			if(match[i]==0||dfs(match[i])){
				match[i]=x;
				return true;	
			}
		}
	}
	return false;
}
int main(){
	scanf("%d",&t);
	for(int i=1;i<=t;i++){
		scanf("%d",&n);
		int l=n;
		for(int j=1;j<=n;j++){
			int k;
			scanf("%d",&k);
			if(k==0) vis[j]=false;//school
			else vis[j]=true;
		}
		for(int j=1;j<=n;j++){
			int op;
			scanf("%d",&op);
			if(vis[j]==false) f[op]=1;
			else{
				f[op]=op;
			}
		}
		for(int p=1;p<=n;p++){
			for(int q=1;q<=n;q++){
				cin>>a[p][q];
				lol[p][q]=a[p][q];
				if(vis[p]==true){
					lol[p][p]=1;
				}
			}
		}
		int sum=0;
		bool flag=false;
		for(int j=1;j<=n;j++){
			memset(pr,false,sizeof(pr));
			if(vis[j]==false&&f[j]==0){
				if(!dfs(i)){
					cout<<"T_T";
					flag=true;
					break;
				}
			}
		}
		if(flag==false)cout<<"^_^";
	}
	return 0;
}	
2021/1/11 15:55
加载中...