Cod sursa(job #1341439)

Utilizator T.C.11Tolan Cristian T.C.11 Data 12 februarie 2015 19:02:11
Problema Cutii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <list>
#include <deque>

using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");

int fv[3501],viz[3501],nr,Max,n,i,j,k,t;
struct coce{int x,y,z;} v[3501];
list<int> l[3501];


void bf(int i)
{
    deque<int> f;
    f.push_back(i);
    viz[i]=1;
    while (f.empty()==false)
    {
        for ( list<int>::iterator c = l[f.front()].begin(); c != l[f.front()].end(); c ++ )
        {
            if (viz[*c]<viz[f.front()]+1)
            {
                viz[*c]=viz[f.front()]+1;
                f.push_back(*c);
                if (viz[*c]>Max)
                    Max=viz[*c];
            }
        }
        f.pop_front();
    }
}

void reset()
{
    for (int i=1;i<=n;i++)
    {
        while (l[i].empty() == false)
            l[i].pop_back();
        viz[i]=0;
        fv[i]=0;
    }
    Max=0;
}

int main()
{
    fin>>n>>t;
    for (k=1;k<=t;k++)
    {
        for (i=1;i<=n;i++)
            fin>>v[i].x>>v[i].y>>v[i].z;
        for (i=1;i<=n;i++)
            for (j=1;j<=n;j++)
                if (i!=j)
                {
                    if (v[i].x<v[j].x&&v[i].y<v[j].y&&v[i].z<v[j].z)
                        l[j].push_back(i),fv[i]=1;
                    else if (v[i].x>v[j].x&&v[i].y>v[j].y&&v[i].z>v[j].z)
                        l[i].push_back(j),fv[j]=1;
                }
        for (i=1;i<=n;i++)
            if (fv[i]==0)
                bf(i);
        fout<<Max<<"\n";
        reset();
    }
    return 0;
}