WA on #1 求助
查看原帖
WA on #1 求助
439177
Supor__Shoep楼主2023/3/21 16:40

感觉没有什么问题,但是就是挂掉了。。。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=305;
const int MAXM=MAXN*MAXN<<1;
int n,m;
int match[MAXM],vis[MAXM];
int tim;
char s[MAXN][MAXN];
vector<int> v[MAXM];
int Get(int i,int j){ return (i-1)*m+j; }
int dirx[4]={1,-1,0,0};
int diry[4]={0,0,1,-1};
int dfs(int x)
{
	if(vis[x]==tim)	return 0;
	vis[x]=tim;
	for(auto &i:v[x])
	{
		if(vis[i]==tim)	continue;
		vis[i]=tim;
		if(!match[i]||dfs(match[i]))
		{
			match[x]=i,match[i]=x;
			return 1;
		}
	}
	return 0;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)	cin>>s[i][j];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(s[i][j]=='1')	continue;
			if((i+j)%2==0)	continue;
			for(int k=0;k<4;k++)
			{
				int tx=i+dirx[k],ty=j+diry[k];
				if(tx<1||tx>n||ty<1||ty>m||s[tx][ty]=='1')	continue;
				int now=Get(i,j),to=Get(tx,ty);
				v[now].push_back(to),v[to].push_back(now);
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(s[i][j]=='2')
			{
				int now=Get(i,j);
				if(!match[now])
				{
					tim++;
					if(!dfs(now))
					{
						puts("No");
						return 0;
					}
				}
			}
		}
	}
	puts("Yes");
    return 0;
}
2023/3/21 16:40
加载中...