全RE qiutiao
查看原帖
全RE qiutiao
701387
xiaoliebao1115楼主2024/8/6 21:39
#include<bits/stdc++.h>
using namespace std;
const int nn=10005;
int n,m,vistime[nn],mch[nn],v[nn];
vector<int> edge[nn];
bool dfs(int u,int tag){
	if(vistime[u]==tag) return false;
	vistime[u]=tag;
	for(int i=0;i<edge[u].size();i++){
		int v=edge[u][i];
		if(mch[v]==0||dfs(mch[v],tag)){
			mch[v]=u;
			return true;
		}
	} 
	return false;
}
inline bool dfs2(int x,int k){
	v[x]=k;
	for(int i=0;i<edge[x].size();i++){
		int y=edge[x][i];
		if(!v[y]) dfs2(y,3-k);
	}
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		a++,b++;
		edge[a].push_back(b),edge[b].push_back(a);
	}
	for(int i=1;i<=n;i++){
		if(!v[i]) dfs2(i,1);
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(v[i]==1){
			if(dfs(i,i)) ans++;
		}
	} 
	cout<<n-ans<<endl; 
	return 0;
}
2024/8/6 21:39
加载中...