帅气的大佬们,同志们,90分求调
查看原帖
帅气的大佬们,同志们,90分求调
776751
W0718楼主2024/7/28 11:12
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int maxn=100000+111;
int n,m;
int bian[maxn],mp[maxn],temp,temp1;
bool vis[maxn];
int ans_MAX_PRO_PLAS;
struct node{
	int v;int bh;
	node(int vv,int bhbh)
	{
		v=vv;bh=bhbh;
	}
};
vector<node> vt[maxn];
void dfs(int x,int t)
{
	temp++;
	vis[x]=true;
	mp[x]=t;  
	if(t==1)temp1++;
	for(int i=0;i<vt[x].size();i++)
	{
		int dv=vt[x][i].v;
		if(!vis[dv])
		{
			bian[vt[x][i].bh]=true;
			dfs(dv,!t);	
		} else if(!bian[vt[x][i].bh])
		{
			if(mp[x]!=mp[dv])
			{
				bian[vt[x][i].bh]=true;
			}
			else
			{
				temp1=-2;return ;
			}
		}
	}
}
signed main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int du,dv;scanf("%d %d",&du,&dv);
		vt[du].push_back(node(dv,i)); vt[dv].push_back(node(du,i));
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			temp=0;temp1=0;
			dfs(i,1);
			if(temp1==-2)
			{
				printf("Impossible\n");
				return 0;
			}
			else ans_MAX_PRO_PLAS+=min(temp1,temp-temp1);
		}
	} 
	printf("%d",ans_MAX_PRO_PLAS);
	return 0;
}
2024/7/28 11:12
加载中...