Cod sursa(job #2298312)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 7 decembrie 2018 23:17:31
Problema Sortare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream cin("sortare.in");
ofstream cout("sortare.out");
int N,n,x,y,k,cnt;
vector<int> Poz[5005];
int sol[5005],index[5005];
int main(){
    cin>>n; index[1]=1; N=n;
    for(int i=2;i<=n;i++){
        index[i]=i;
        for(int j=1;j<=3;j++){
            cin>>x; Poz[i].push_back(x);
        }
    }
    for(int i=2;i<=n;i++)
        sort(Poz[i].begin(),Poz[i].end());
    cnt=1;
    while(n>1){
        if(Poz[n][0]!=Poz[n][1] & Poz[n][0]!=Poz[n][2] && Poz[n][1]!=Poz[n][2]){
            y=Poz[n].back();
            Poz[n].pop_back();
            x=Poz[n].back();
            sol[index[x]]=n-1;
            sol[index[y]]=n;
            k=0;
            for(int i=1;i<=n;i++)
                if(!sol[index[i]]) index[++k]=index[i];
            n-=2;
        }
        else{
            Poz[n].pop_back();
            x=Poz[n].back();
            sol[index[x]]=n;
             k=0;
            for(int i=1;i<=n;i++)
                if(!sol[index[i]]) index[++k]=index[i];
            --n;
        }
        ++cnt;
    }
    sol[index[1]]=1;
    cout<<cnt<<'\n';
    for(int i=1;i<=N;i++)
        cout<<sol[i]<<' ';
}