求助,第十个点MLE
查看原帖
求助,第十个点MLE
368106
deadrab5楼主2023/8/6 17:05

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=200001;
int head[MAXN];
int c[MAXN];
int cnt=0;
int dx=0,dy=0,ans=0;
struct edg{
    int nxt,to;
}edge[MAXN]; 
bool add(int u,int v) 
{
    edge[cnt].to =v;
    edge[cnt].nxt =head[u];
    head[u]=cnt++;
}
void dfs(int x,int fa,int col)
{
	if(col==1)
		dx++;
	else
		dy++;
	for(register int i=head[x];i;i=edge[i].nxt)
	{
		int v=edge[i].to ;
		if(v==fa)
			continue;
		if(c[v]==col)
		{
			printf("Impossible");
			exit(0);
		}
		if(c[v]==0)
			c[v]=-col;
		dfs(v,x,-col);
	}
}
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	for(register int i=1;i<=m;++i)
	{
		int u,v;
		scanf("%d %d",&u,&v);
		add(u,v);
		add(v,u);
	}
	for(register int i=1;i<=n;++i)
	{
		if(c[i]==0)
		{
			dfs(i,0,1);
			ans+=min(dx,dy);
			dx=dy=0;
		}
	}
	printf("%d",ans);
	return 0;
}
2023/8/6 17:05
加载中...