Pagini recente » Cod sursa (job #2197769) | Profil usureluflorian | Profil mateisirghe | Statistici Zob Alexandru Mihai (cyg_alexandru546) | Cod sursa (job #163485)
Cod sursa(job #163485)
using namespace std;
#include <algorithm>
using namespace std;
#include <cstdio>
#include <string>
#include <algorithm>
#define maxn 5001
int a[maxn], b[maxn], c[maxn];
int n;
int x[maxn],A[maxn];
bool use[maxn];
int hmax;
void read()
{
freopen("sortare.in","r",stdin);
scanf("%d\n", &n);
for(int i=2;i<=n;++i) scanf("%d %d %d\n", &a[i], &b[i], &c[i]);
}
inline void swap(int i, int j)
{
int t=A[i];A[i]=A[j];A[j]=t;
}
int ax[maxn];
inline void qsort(int l,int r,int h)
{
if(hmax<h)hmax=h;
if(l>=r)return;
int i,j,piv;//+rand()%(li-ls)+1;
int s[4];
s[0]=A[l+a[r-l+1]-1];
s[1]=A[l+b[r-l+1]-1];
s[2]=A[l+c[r-l+1]-1];
//if(l==1 && r==n)
// printf("%d %d %d\n", s[0],s[1],s[2]);
sort(s,s+3);
piv=s[1];
int st=l-1;
int dr=r+1;
for(int x=l;x<=r;++x)
if(A[x]<piv) ax[++st]=A[x];
else if(A[x]>piv) ax[--dr]=A[x];
for(int x=l;x<=r;++x) A[x]=ax[x];
qsort(l, st, h+1);
qsort(dr+1, r, h+1);
}
void solve()
{
int i;
int H=0;
int sol[maxn];
for(i=1;i<=n;++i) x[i]=i;
do
{
for(i=1;i<=n;++i) A[i]=x[i];
hmax=0;
qsort(1,n,1);
if(H<hmax)
{
H=hmax;
for(i=1;i<=n;++i) sol[i]=x[i];
}
}while(next_permutation(x+1,x+n+1));
printf("%d\n", H);
for(i=1;i<=n;++i)printf("%d ", sol[i]);
printf("\n");
/*
printf("\n");
for(i=1;i<=n;++i) A[i]=sol[i];
hmax=0;
qsort(1,n,1);
printf("%d\n", hmax);
*/
}
int main()
{
freopen("sortare.out","w",stdout);
read();
solve();
return 0;
}