Pagini recente » Cod sursa (job #1526761) | Cod sursa (job #1765798) | Cod sursa (job #611206) | Cod sursa (job #187082) | Cod sursa (job #1732008)
#include <bits/stdc++.h>
#define maxN 5002
using namespace std;
int n, v[maxN], ans;
bool used[maxN];
vector < int > s;
struct piv
{
int a, b, c;
} p[maxN];
int Min(int x, int y)
{
if (x < y)
return x;
return y;
}
int Max(int x, int y)
{
if (x > y)
return x;
return y;
}
void read()
{
int i;
freopen("sortare.in", "r", stdin);
scanf("%d", &n);
s.push_back(1);
for (i = 2; i <= n; ++ i)
{
scanf("%d %d %d", &p[i].a, &p[i].b, &p[i].c);
s.push_back(i);
}
}
void sortp()
{
int i, m, M;
ans = 0;
while (s.size() > 1)
{
++ ans;
int len = s.size();
m = Min(Min(s[p[len].a - 1], s[p[len].b - 1]), s[p[len].c - 1]);
M = Max(Max(s[p[len].a - 1], s[p[len].b - 1]), s[p[len].c - 1]);
if (p[len].a != p[len].b && p[len].b != p[len].c && p[len].c != p[len].a)
{
if (s[p[len].a - 1] != m && s[p[len].a - 1] != M)
M = s[p[len].a - 1];
else if (s[p[len].b - 1] != m && s[p[len].b - 1] != M)
M = s[p[len].b - 1];
else
M = s[p[len].c - 1];
v[m] = len;
v[M] = len - 1;
}
else
{
v[M] = len;
}
s.clear();
for (i = 1; i <= n; ++ i)
if (!v[i])
s.push_back(i);
}
if (s.size())
{
++ ans;
v[s[0]] = 1;
}
}
void solve()
{
int i;
sortp();
}
void write()
{
int i;
freopen("sortare.out", "w", stdout);
printf("%d\n", ans);
for (i = 1; i <= n; ++ i)
printf("%d ", v[i]);
}
int main()
{
read();
solve();
write();
return 0;
}