CF1578K求条
  • 板块灌水区
  • 楼主xzz_cat6
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/2 19:39
  • 上次更新2024/10/2 21:30:13
查看原帖
CF1578K求条
773813
xzz_cat6楼主2024/10/2 19:39

WA了一些点,但不多

#include<bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
using namespace std;
int n,m,k,a[100005],u[25],v[25];
int id[100005],cnt;
bool vis[100005];
vector<int> tem[100005];
int num[100005],tmp[100005],ans;
vector<int> spt;
size_t r[105],x[105],p[105],q[105],prt;
inline void dfs(int d){
	if(x[d]==0&&p[d]==0){
		if(__builtin_popcount(r[d])>ans)	ans=__builtin_popcount(r[d]),prt=r[d];
		return;
	} 
	int u=0;
	for(int i=1;i<=cnt;i++){
		if(p[d]&(1ull<<i)){
			if(!u)	u=i;
			if(q[u]&(1ull<<i))	continue;
			r[d+1]=r[d];
			r[d+1]|=(1ull<<i);
			p[d+1]=(p[d]&q[i]);
			x[d+1]=(x[d]&q[i]);
			dfs(d+1);
			p[d]^=(1ull<<i),x[d]|=(1ull<<i);	
		}
	}
}
int main(){
//	freopen("09","r",stdin);
//	freopen("war.in","r",stdin);
//	freopen("war.out","w",stdout);
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		tem[a[i]].push_back(i);
	}
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>u[i]>>v[i];
		if(!id[u[i]])	id[u[i]]=++cnt;
		if(!id[v[i]])	id[v[i]]=++cnt;
	}
	for(int i=1;i<=n;i++){
		if(id[i])	num[a[i]]++,vis[a[i]]=1,tmp[a[i]]=i;
	}
	for(int i=1;i<=m;i++){
		if(vis[i]){
			for(auto v:tem[i]){
				if(!id[v]){
					if(num[i]==1)	id[v]=id[tmp[i]],id[tmp[i]]=0;
					else	id[v]=++cnt;
					break;
				}
			}
		}
	}
	cnt=0;
	for(int i=1;i<=n;i++){
		if(id[i])	id[i]=++cnt,spt.push_back(i);
	}
	for(auto u:spt){
		for(auto v:spt){
			if(u==v)	continue;
			if(a[u]!=a[v])	q[id[u]]|=(1ull<<id[v]);
		}
	}
	for(int i=1;i<=k;i++){
		if(!id[u[i]]||!id[v[i]])	continue;
		q[id[u[i]]]|=(1ull<<id[v[i]]),q[id[v[i]]]|=(1ull<<id[u[i]]);
		if(a[u[i]]!=a[v[i]]){
			q[id[u[i]]]^=(1ull<<id[v[i]]),q[id[v[i]]]^=(1ull<<id[u[i]]);
		}
	}
	for(int i=1;i<=cnt;i++){
		p[0]|=(1ull<<i);
	}
	dfs(0);
	for(int i=1;i<=m;i++){
		if(!vis[i])	ans++;
	} 
	cout<<ans<<'\n';
	for(int i=1;i<=m;i++){
		if(!vis[i])	cout<<tem[i][0]<<' ';
	}
	for(int i=1;i<=cnt;i++){
		if(prt&(1ull<<i))	cout<<spt[i-1]<<' ';	
	}
	return 0;
} 
2024/10/2 19:39
加载中...