求助!!!
查看原帖
求助!!!
844496
J_Kobe楼主2024/4/6 16:01

50分。

#include <bits/stdc++.h>
using namespace std;

int n, m, ans = 0, sum = 0;
vector<int> a[10005];
int f[10005], cnt;
bool ff = true;
void dfs(int x, int flag)
{
	if (ff == false)
	{
		return ;
	}
	for (int i = 0; i < a[x].size(); i++)
	{
		if (f[a[x][i]] == 0)
		{
			f[a[x][i]] = flag;
			cnt++;
			dfs(a[x][i], 3 - flag);
		}
		else
		{
			if (f[a[x][i]] != flag)
			{
				ff = false;
				break;
			}
		}
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie();cout.tie();
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		int u, v;
		cin >> u >> v;
		a[u].push_back(v);
		a[v].push_back(u);
	}
	for (int i = 1; i <= n; i++)
	{
		if (f[i] == 0)
		{
			f[i] = 1;
			cnt = 1;
			dfs(i, 2);
			if (cnt == 1)
			{
				f[i] = 0;
			}
		}
	}
	if (ff == false)
	{
		printf("Impossible");
		return 0;
	}
	for (int i = 1; i <= n; i++)
	{
		if (f[i] == 1)
		{
			ans++;
		}
		else if (f[i] == 2)
		{
			sum++;
		}
//		cout << f[i] << ' ';
	}
//	cout << endl;
	cout << min(ans, sum);
	return 0;
}
2024/4/6 16:01
加载中...