Pagini recente » Cod sursa (job #1891141) | Cod sursa (job #2517467) | Cod sursa (job #794644)
Cod sursa(job #794644)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#include <cstdio>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
vector<int> adj[4000];
int x[4000],y[4000],z[4000];
int cost[4000];
bool finished[4000];
int t;
int n;
void dfs(deque<int>& dq,int node)
{
finished[node] = true;
for (int i=0; i<adj[node].size(); i++)
{
if (!finished[adj[node][i]])
{
dfs(dq,adj[node][i]);
}
}
dq.push_front(node);
}
deque<int> toporder()
{
deque<int> order;
for (int i=0; i<n; i++)
if (!finished[i])
{
dfs(order,i);
}
return order;
}
int main()
{
fin >> n >> t;
for (int tests=0; tests<t; tests++)
{
for (int i=0; i<n; i++)
{
fin >> x[i] >> y[i] >> z[i];
adj[i].clear();
finished[i] = false;
cost[i] = 0;
}
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
if (x[i] < x[j] && y[i] < y[j] && z[i] <z[j] )
{
adj[i].push_back(j);
}
deque<int> ord = toporder();
int maxTotal = 0;
//cout << "top order"<<endl;
while (ord.size())
{
//cout << ord.front()<< " " <<endl;
for (int i=0; i<adj[ord.front()].size(); i++)
{
cost[adj[ord.front()][i]] = max(cost[adj[ord.front()][i]] , cost[ord.front()]+1);
maxTotal = max(maxTotal, cost[adj[ord.front()][i]]);
}
ord.pop_front();
}
//cout << "max:"<<endl;
fout << maxTotal+1<<endl;
}
}