Cod sursa(job #1661833)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 24 martie 2016 11:08:47
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct piv{
    int a;
    int b;
    int c;
}v[5010];
int n,i,j,a,b,c,nr,ns,x[5010],y[5010],z[5010];
FILE *f,*g;
void chg(int &a,int &b){
    int aux = a;
    a = b;
    b = aux;
}
int main(){
    f=fopen("sortare.in","r");
    g=fopen("sortare.out","w");
    fscanf(f,"%d",&n);
    x[ ++nr ] = 1;
    for(i=2;i<=n;i++){
        fscanf(f,"%d%d%d",&v[i].a,&v[i].b,&v[i].c);
        x[ ++nr ] = i;
    }
    while( nr >= 2 ){
        ns++;
        a = nr;
        y[1] = x[ v[a].a ];
        y[2] = x[ v[a].b ];
        y[3] = x[ v[a].c ];
        sort(y + 1, y + 4);
        if( y[1] == y[2] || y[2] == y[3] )
            z[ y[2] ] = nr;
        else{
            z[ y[1] ] = nr;
            z[ y[2] ] = nr - 1;
        }
        nr = 0;
        for(i=1;i<=n;i++){
            if( !z[i] )
                x[ ++nr ] = i;
        }
    }
    if( nr == 1 ){
        ns++;
        z[ x[1] ] = 1;
    }
    fprintf(g,"%d\n",ns);
    for(i=1;i<=n;i++){
        fprintf(g,"%d ",z[i]);
    }



    fclose(f);
    fclose(g);
    return 0;
}