Pagini recente » Cod sursa (job #1832699) | Cod sursa (job #271717) | Cod sursa (job #1046440) | Cod sursa (job #1948567) | Cod sursa (job #2644569)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sortare.in");
ofstream out("sortare.out");
int a[5005],b[5005],c[5005];
int hmax[5005],val[5005];
vector<int> solve(int dim,int add)
{
vector<int> v(dim+1);
if(dim==1) {v[1]=add+1;return v;}
vector<int> st=solve(val[dim]-1,add);
vector<int> dr=solve(dim-val[dim],add+val[dim]);
int unde=1,ind=1;
for(int i=1;i<=dim;++i)
{
if(i==b[dim]) {v[i]=add+val[dim];continue;}
if(unde==1)
{
v[i]=st[ind];
++ind;
if(ind>val[dim]-1)
unde=2,ind=1;
}
else if(unde==2)
{
v[i]=dr[ind];
++ind;
}
}
return v;
}
int main()
{
int n;
in>>n;
vector<int> srt;
for(int i=2;i<=n;++i)
{
in>>a[i]>>b[i]>>c[i];
srt.clear();
srt.push_back(a[i]);
srt.push_back(b[i]);
srt.push_back(c[i]);
sort(srt.begin(),srt.end());
a[i]=srt[0],b[i]=srt[1],c[i]=srt[2];
}
hmax[1]=1;
for(int i=2;i<=n;++i)
{
int rep=-1;
if(a[i]==b[i])
rep=a[i];
else if(a[i]==c[i])
rep=c[i];
else if(b[i]==c[i])
rep=b[i];
if(rep!=-1)
{
for(int j=1;j<=i;++j)
{
//hmax[i]=max(hmax[i],1+max(hmax[j-1],hmax[i-j]));
if(1+max(hmax[j-1],hmax[i-j])>hmax[i])
{
val[i]=j;
hmax[i]=1+max(hmax[j-1],hmax[i-j]);
}
}
}
else
{
for(int j=2;j<i;++j)
{
//hmax[i]=max(hmax[i],1+max(hmax[j-1],hmax[i-j]));
if(1+max(hmax[j-1],hmax[i-j])>hmax[i])
{
val[i]=j;
hmax[i]=1+max(hmax[j-1],hmax[i-j]);
}
}
}
}
out<<hmax[n]<<'\n';
vector<int> ans=solve(n,0);
for(int i=1;i<=n;++i)
out<<ans[i]<<' ';
return 0;
}