dfs40分求助
查看原帖
dfs40分求助
591668
Walker_Sama楼主2022/7/19 22:10

rt 求助

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int to,next;
}edge[200005];
int head[10005],cnt=1,n,m;
bool vis[10005];
int color[10005],sum[2];
void add(int u,int v){
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	head[u]=cnt++;
}
void dfs(int x,int c){
	vis[x]=1;
	color[x]=c;
	sum[c]++;
	for(int i=head[x];i;i=edge[i].next){
		int v=edge[i].to;
		if(vis[v]){
			if(color[v]==1-c){
				continue;
			}
			else{
				cout<<"Impossible";
				exit(0);
			}
		}
		else{
			dfs(v,1-c);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		add(a,b);
		add(b,a);
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		sum[0]=0,sum[1]=0;
		if(!vis[i]){
			dfs(1,0);
		}
		ans+=min(sum[0],sum[1]);
	}
	cout<<ans;
	return 0;
}

在线等qwq

2022/7/19 22:10
加载中...