dalao进来看看啊
  • 板块题目总版
  • 楼主lei_yu
  • 当前回复31
  • 已保存回复31
  • 发布时间2020/7/1 20:30
  • 上次更新2023/11/6 23:48:56
查看原帖
dalao进来看看啊
224927
lei_yu楼主2020/7/1 20:30

真心求助,最近的N个帖子都没有回复!!!!

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dx[9]={0,1,-1,-2,2,1,-1,-2,2};
int dy[9]={0,-2,2,1,-1,2,-2,-1,1};
int head[100001],n,m,cnt,belong[100001],finds[100001],l_cnt,r_cnt;
bool b[505][505];
struct node
{
	int to,next;
}a[1000001];
void add_edge(int from,int to)
{
	a[++cnt].to=to;
	a[cnt].next=head[from];
	head[from]=cnt;
}
bool dfs(int u)
{
	for(int i=head[u];i;i=a[i].next)
	{
		int v=a[i].to;
		if(!finds[v])
		{
			finds[v]=1;
			if(!belong[v]||dfs(belong[v]))
			{
				belong[v]=u;
				return 1;
			}
		}
	}
	return 0;
}
int main()
{
	int x,y;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y;
		b[x][y]=1;
	}
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	if(i%2==j%2&&!b[i][j])
	{
		l_cnt++;
		for(int k=1;k<=8;k++)
		{
			x=i+dx[k];
			y=j+dy[k];
			if(x>0&&y>0&&x<=n&&y<=n&&!b[x][y])
			{
				r_cnt++;
				add_edge(l_cnt,r_cnt);
			}
			
		}
	}
	r_cnt=n*n-l_cnt-m;
	int ans=0;
	for(int i=1;i<=l_cnt;i++)
	{
		memset(finds,0,sizeof(finds));
		if(dfs(i))ans++;
	}
	cout<<l_cnt+r_cnt-ans;
}

P3355 骑士共存问题

使用的匈牙利,不管最后一个点能不能过,其他点都WA了一堆:

AC点为1 2 4

2020/7/1 20:30
加载中...