求助90pt
查看原帖
求助90pt
115252
Ciallos楼主2022/10/28 19:26
#include <bits/stdc++.h>
using namespace std;
vector <int> g[1005];
int a[1005][2];
int match[1005],t[1005],c[1005];
int find(int x) {
	int i,v;
	for (i=0; i<g[x].size(); i++) {
		v=g[x][i];
		if (t[v]==0) {
			t[v]=1;
			if (match[v]==0||find(match[v])==1) {
				match[v]=x;
				return 1;
			}
		}
	}
	return 0;
}

void color (int u,int fa) {
    if (c[fa]==1){
    	c[u]=2;
	}else{
		c[u]=1;
	}
	for (int i=0; i<g[u].size(); i++) {
		int v=g[u][i];
		if (v==fa||c[v]!=0) {
			continue;
		}
		color(v,u);
	}
}

int main () {
	int n,m,i,x,y,ans=0;
	cin>>n>>m;
	for (i=1; i<=m; i++) {
		cin>>x>>y;
		x++,y++;
		g[x].push_back(y);
		g[y].push_back(x);
		a[i][0]=x,a[i][1]=y;
	}
	for (i=1;i<=m;i++){
		if (c[a[i][0]]==0){
			color(a[i][0],0);
		}
		if (c[a[i][1]]==0){
			color(a[i][1],0);
		}
	}
	for (i=1; i<=n; i++) {
		if (c[i]!=0) {
			memset(t,0,sizeof(t));
			if (find(i)==1) {
				ans++;
			}
		}
	}
	cout<<(n-ans);
	return 0;
}

求助

2022/10/28 19:26
加载中...