玄学CE
查看原帖
玄学CE
1122193
FarmerDrone楼主2024/8/24 19:20

做法是错的,ctjer别想了
区别是abs改成fabs
CE的

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

int main()
{
	int t;
	cin >> t;
	while (t--)
	{	
		int n;
		cin >> n;
		vector <int> vc[n + 1];
		int u, v, m = n - 1;
		while (m--)
		{
			cin >> u >> v;
			vc[u].push_back(v);
			vc[v].push_back(u);
		}
		vector <int> ans[2];
		bool bl[n + 1] = {0, 0};
		bool vis[n + 1];
		memset(vis, 0, sizeof(vis));
		vis[1] = 1;
		ans[0].push_back(1);
		queue <int> q;
		q.push(1);
		while (! q.empty())
		{
			int fr = q.front();
		//	cout << fr << " ";
			q.pop();
			for (int i = 0; i < vc[fr].size(); i++)
				if (! vis[vc[fr][i]])
				{
					vis[vc[fr][i]] = 1;
					bl[vc[fr][i]] = ! bl[fr];
					ans[! bl[fr]].push_back(vc[fr][i]);		
					q.push(vc[fr][i]);			
				}
		}
		//cout << endl;
		//cout << ans[0].size() << " " << ans[1].size() << endl;
		if (abs(ans[0].size() - ans[1].size()) > 1)
			cout << -1;
		else if (ans[0].size() >= ans[1].size())
		{
			for (int i = 0; i < n / 2; i++)
				cout << ans[0][i] << " " << ans[1][i] << " ";
			if (n & 1)
				cout << ans[0][n / 2];
		}
		else
		{
			cout << ans[1][0] << " ";
			for (int i = 0; i < n / 2; i++)
				cout << ans[0][i] << " " << ans[1][i + 1] << " ";
		}
		cout << endl;
	} 
	return 0;
}

WA的

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

int main()
{
	int t;
	cin >> t;
	while (t--)
	{	
		int n;
		cin >> n;
		vector <int> vc[n + 1];
		int u, v, m = n - 1;
		while (m--)
		{
			cin >> u >> v;
			vc[u].push_back(v);
			vc[v].push_back(u);
		}
		vector <int> ans[2];
		bool bl[n + 1] = {0, 0};
		bool vis[n + 1];
		memset(vis, 0, sizeof(vis));
		vis[1] = 1;
		ans[0].push_back(1);
		queue <int> q;
		q.push(1);
		while (! q.empty())
		{
			int fr = q.front();
		//	cout << fr << " ";
			q.pop();
			for (int i = 0; i < vc[fr].size(); i++)
				if (! vis[vc[fr][i]])
				{
					vis[vc[fr][i]] = 1;
					bl[vc[fr][i]] = ! bl[fr];
					ans[! bl[fr]].push_back(vc[fr][i]);		
					q.push(vc[fr][i]);			
				}
		}
		//cout << endl;
		//cout << ans[0].size() << " " << ans[1].size() << endl;
		if (fabs(ans[0].size() - ans[1].size()) > 1)
			cout << -1;
		else if (ans[0].size() >= ans[1].size())
		{
			for (int i = 0; i < n / 2; i++)
				cout << ans[0][i] << " " << ans[1][i] << " ";
			if (n & 1)
				cout << ans[0][n / 2];
		}
		else
		{
			cout << ans[1][0] << " ";
			for (int i = 0; i < n / 2; i++)
				cout << ans[0][i] << " " << ans[1][i + 1] << " ";
		}
		cout << endl;
	} 
	return 0;
}
2024/8/24 19:20
加载中...