做法是错的,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;
}