Pagini recente » Cod sursa (job #1008340) | Istoria paginii utilizator/popescudiana2 | Istoria paginii utilizator/bombonikdulcik | Istoria paginii utilizator/bilalkaan | Cod sursa (job #726713)
Cod sursa(job #726713)
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
#include <cstring>
#define MAXN 3510
using namespace std;
stack<int>S;
vector<int>C[MAXN];
bool viz[MAXN],a[MAXN][MAXN];
int lmax[MAXN],n,m,s[MAXN],sol,prev[MAXN],t;
bool incape(int x,int y)
{
for(int i=0;i<C[x].size();i++) if(C[x][i]<C[y][i]) return 0;
return 1;
}
void dfs(int x)
{
viz[x]=1;
for(int i=1;i<=n;i++)
if(a[x][i] and !viz[i]) dfs(i);
S.push(x);
}
int main()
{
int i,j,x;
ifstream fi("cutii.in");
ofstream fo("cutii.out");
fi>>n>>t;
for (;t;--t) {
memset(a,0,sizeof(a));memset(lmax,0,sizeof(lmax));memset(viz,0,sizeof(viz));
for(j=1;j<=n;j++)
{
C[j].clear();
fi>>x;
C[j].push_back(x);
fi>>x;
C[j].push_back(x);
fi>>x;
C[j].push_back(x);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(incape(i,j)) a[i][j]=1;
}
for(i=1;i<=n;i++)
if(!viz[i]) dfs(i);
m=0;
while(!S.empty())
{
s[++m]=S.top();
S.pop();
}
for(i=1;i<=m;i++)
{
lmax[i]=1;
for(j=1;j<i;j++)
if(a[s[j]][s[i]] and lmax[j]+1>lmax[i]) { lmax[i]=lmax[j]+1; prev[i]=j; }
if(lmax[i]>lmax[sol]) sol=i;
}
fo<<lmax[sol]<<"\n";
}
fo<<"\n";
return 0;
}