Cod sursa(job #726686)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 27 martie 2012 13:44:27
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define M 3510


using namespace std;

ifstream f("cutii.in");
ofstream g("cutii.out");


vector<int> C[M],A[M],B[M];
int m,n,i,j,d,Depth[M],ANS=0,PANS,t,v[M];

bool Included(int In,int Out)
{
    for (unsigned int i=0; i<C[In].size(); i++)
        if (C[In][i]>=C[Out][i]) return false;
    return true;
}

void DF(int Node,int Lev)
{
    v[Node]=1;
    if (Lev>Depth[Node]) Depth[Node]=Lev;
    for (unsigned int i=0; i<A[Node].size(); i++)
        if (!v[A[Node][i]] || Depth[A[Node][i]]<Lev+1) DF(A[Node][i],Lev+1);
    if (Depth[Node]>ANS) ANS=Depth[Node],PANS=Node;
    return;
}



int main()
{
    for (f >> n >> t;t;--t) {
        for (i=1; i<=n; i++)
        {
            A[i].clear();
            C[i].clear();
            f >> d;
            C[i].push_back(d);
            f >> d;
            C[i].push_back(d);
            f >> d;
            C[i].push_back(d);
            Depth[i]=v[i]=0;
        }
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            if (i!=j && Included(i,j))
                A[j].push_back(i);
    ANS=0;
    for (i=1; i<=n; i++)
        if (!v[i]) DF(i,1);
    g << ANS << '\n';
   }
    f.close();
    g.close();
    return 0;
}