Pagini recente » Cod sursa (job #1614083) | Cod sursa (job #958358) | Cod sursa (job #1493027) | Cod sursa (job #341011) | Cod sursa (job #983579)
Cod sursa(job #983579)
#include <fstream>
#include <set>
#define MAXN 5005
using namespace std;
ifstream f("sortare.in");
ofstream g("sortare.out");
int n,a[MAXN],b[MAXN],c[MAXN],perm[MAXN],lvl,x;
set<int> v;
set<int>::iterator it,it2;
void solve(int p);
int main()
{
int i;
f>>n;
for(i=1;i<=n;i++)
v.insert(i);
for(i=2;i<=n;i++)
f>>a[i]>>b[i]>>c[i];
solve(n);
g<<lvl<<'\n';
for(i=1;i<=n;i++)
g<<perm[i]<<' ';
f.close();
g.close();
return 0;
}
void solve(int p){
int i;
if(p<=2){
for(i=1;i<=p;i++){
perm[*v.begin()]=i;
v.erase(v.begin());}
if(p==2)
lvl+=2;
else
lvl++;
return;}
lvl++;
if(a[p]==b[p]||a[p]==c[p]||b[p]==c[p]){
x=a[p];
if(b[p]!=x&&c[p]!=x)
x=b[p];
for(it=v.begin(),i=1;i<x;it++,i++);
perm[*it]=p;
v.erase(it);
return solve(p-1);}
for(it=v.begin(),i=1;i<a[p];it++,i++);
perm[*it]=p;
for(it2=v.begin(),i=1;i<b[p];it2++,i++);
perm[*it2]=p-1;
v.erase(it);
v.erase(it2);
return solve(p-2);}