Cod sursa(job #956927)

Utilizator proflaurianPanaete Adrian proflaurian Data 4 iunie 2013 08:53:36
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include<vector>
using namespace std;
vector<int> v[3501];
int n,t,i,j,a[3501],b[3501],c[3501],s[3501];
void get_s(int);
int main()
{
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%d%d",&n,&t);
    for(;t;t--)
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d%d%d",&a[i],&b[i],&c[i]);v[i].resize(0);s[i]=0;
        }
        for(i=1;i<n;i++)
            for(j=i+1;j<=n;j++)
            {
                if(a[i]<a[j])
                {
                    if(b[i]<b[j]&&c[i]<c[j])v[i].push_back(j);
                    continue;
                }
                if(b[i]>b[j]&&c[i]>c[j])v[j].push_back(i);
            }
        for(i=1;i<=n;i++)
            if(!s[i])get_s(i);
        for(i=1,j=1;i<=n;i++)if(s[i]>s[j])j=i;
        printf("%d\n",s[j]);

    }
    return 0;
}
void get_s(int k)
{
    for(vector<int>::iterator it=v[k].begin();it!=v[k].end();it++)
    {
        if(!s[*it])get_s(*it);
        s[k]=max(s[k],s[*it]);
    }
    s[k]++;
}