二分图WA10pts求助
查看原帖
二分图WA10pts求助
1785911
asuka_qwq楼主2025/7/25 16:13

蒟蒻代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=210,M=4e4+10;
int n,m,T;
int mp[N][N],a[N][N],vis[M];
int flag[M];
vector<int>s[M];
int lx[]={0,-1,-2,1,2,-1,-2,1,2},ly[]={0,-2,-1,-2,-1,2,1,2,1};
bool dfs(int x){
	for(int i=0;i<s[x].size();i++){
		int y=s[x][i];
		if(vis[y])continue;
		vis[y]=1;
		if(!flag[y]||dfs(flag[y])){
			flag[y]=x;
			return 1;
		}
	}
	return 0;
}
signed main(){
	ios::sync_with_stdio(NULL);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			mp[i][j]=(i+j)%2;
		}
	}
	string ss[n];
	for(int i=0;i<n;i++){
		cin>>ss[i];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(ss[i][j]=='1'){
				mp[i+1][j+1]=2;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(mp[i][j]==0){
				for(int k=1;k<=8;k++){
					int new_i=i+lx[k],new_j=j+ly[k];
					if(new_i>0&&new_i<=n&&new_j>0&&new_j<=n&&mp[new_i][new_j]!=2){
						s[(i-1)*n+j].push_back((new_i-1)*n+new_j);
					}
				}
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(mp[i][j]==0){
				memset(vis,0,sizeof(vis));
				ans+=dfs((i-1)*n+j);
			}
		}
	}
	cout<<ans;
    return 0;
}
2025/7/25 16:13
加载中...