How WA ON #1
查看原帖
How WA ON #1
795344
lfxxx_楼主2025/1/15 14:16
#include<bits/stdc++.h>
#define f(u) (u==-1)
using namespace std;
const int N=3005;
	int n,m,K;
int a[N],b[N],mp[N][N];
vector<int>edge[N];
int mat[N],vis[N];
bool dfs(int u,int p,int q)
{
	for(auto &v:edge[u])
	{
		if(vis[v])
			continue;
		if((p&&!mp[p][u])||(q&&!mp[q][u]))
			continue;
		vis[v]=1;
		if(!mat[v]||dfs(mat[v],p,q))
		{
			mat[v]=u;
			return 1;
		}
	}
	return 0;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>n>>m>>K;
	for(int i=1;i<=n;++i)
		cin>>a[i];
	for(int i=1;i<=m;++i)
		cin>>b[i];
    for(int i=1;i<=m;++i)
        for(int j=1;j<=m;++j)
            if((b[j]&1)&&!(__builtin_popcount(b[i]|b[j])&1))
                edge[i].emplace_back(j);
	for(int i=1;i<=K;++i)
	{
		int u,v;
		cin>>u>>v;
		mp[u][v]=1;
	}
	int ans=0;
	for(int i=1;i<=m;++i)
	{
		memset(vis,0,sizeof vis);
		ans-=dfs(i,0,0);
	}
	ans+=m;
	for(int i=1;i<=n;++i)
	{
		memset(mat,0,sizeof mat);
		int cnt=0;
		for(int j=1;j<=m;++j)
		{
			
			if(mp[i][j])
			{
				if(!(b[j]&1))
				{
					++cnt;
					continue;
				}
				memset(vis,0,sizeof vis);
				cnt+=(dfs(j,i,0)^1);
			}
		}
		ans=max(ans,cnt+1);
	}
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if((a[i]^a[j])&1)
			{
				memset(mat,0,sizeof mat);
				int cnt=0;
				for(int k=1;k<=m;++k)
					if(mp[i][k])
					{
						if(!(b[k]&1)||!mp[j][k])
						{
							++cnt;
							continue;
						}
						memset(vis,0,sizeof vis);
						cnt+=(dfs(k,i,j)^1);
					}
				ans=max(ans,cnt+2);
			}
	cout<<ans;
}
2025/1/15 14:16
加载中...