30分求调
查看原帖
30分求调
418419
ko_no_lzx_da楼主2022/7/26 11:28
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
int color[100010];
int li[502];
bool book[502];
struct node{
	int next,u,v;
}edge[100010];
int head[1000010];
int cnt;
int js[3]; 
void add(int u,int v){
	edge[++cnt].v=v;
	edge[cnt].u=u;
	edge[cnt].next=head[u];
	head[u]=cnt;
}
int n,m;
bool pd=true;
int l[1000010],r[1000010],ll,rr;
void dfs(int num){
	for(int i=head[num];i;i=edge[i].next){
	//	cout <<edge[i].u<<" "<<edge[i].v<<endl;
		if(color[edge[i].v]==0){
			color[edge[i].v]=3-color[num];
			if(3-color[num]==1){
				ll++;
				l[ll]=edge[i].v;
			}else{
				rr++;
				r[rr]=edge[i].v;
			}
			dfs(edge[i].v);
		}else if(color[edge[i].v]==color[edge[i].u]){
			pd=false;
			return;
		}
	}
}	
bool ddfs(int u){
	for(int i=head[u];i;i=edge[i].next){
		if(!book[edge[i].v]){
			book[edge[i].v]=1;
			if(!li[edge[i].v]||ddfs(li[edge[i].v])){
				li[edge[i].v]=u;
				return true;
			}
		}
	}
	return false;
}
int hu(){
	int ans=0;
	memset(li,0,sizeof(li));
	for(int u=1;u<=ll;u++){
		memset(book,0,sizeof(book));
		if(ddfs(l[u])){
			ans++;
		}
	}
	return ans;
}
int main(){
	cin >>n>>m;
	for(int i=1;i<=m;i++){
		int uu,vv; 
		cin >>uu>>vv;
		add(uu,vv);
		add(vv,uu);
	}
	js[1]++;
	color[1]=1;
	dfs(1);
	if(pd){
		cout <<hu();
	}else{
		cout <<"Impossible";
	}
	return 0;
}



2022/7/26 11:28
加载中...