50pts求助!!!
查看原帖
50pts求助!!!
683768
Allen_yang楼主2023/1/1 10:32

rt,二分图,考虑了不连通

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=1e4+5;
vector<int> t[maxn];
int dis[maxn];
int n,m,ans=0;
bool bfs(){
	queue<int> q;
	memset(dis,0,sizeof dis);
	int c1=0,c2=0;
	for(int i=1;i<=n;i++){
		if(dis[i]==0){
			q.push(i);
			dis[i]=1;
			while(!q.empty()){
				int d=q.front();
				q.pop();
				for(auto it:t[d]){
					if(dis[it]==0){
						dis[it]=-dis[d];
						q.push(it);
						if(dis[it]==1){
							c1++;
						}else{
							c2++;
						}
					}else if(dis[it]==dis[d]){
						return false;
					}
				}
			}
		}
	}
	ans+=min(c1,c2);
	return true;
}
int main(){
	cin >> n >> m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin >> u >> v;
		t[u].push_back(v);
		t[v].push_back(u);
	}
	if(!bfs())cout << "Impossible";
	else cout << ans;
	return 0;
} 
2023/1/1 10:32
加载中...