結果

問題 No.497 入れ子の箱
ユーザー mai
提出日時 2017-03-25 00:07:03
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 199 ms / 5,000 ms
コード長 8,743 bytes
コンパイル時間 1,876 ms
コンパイル使用メモリ 181,416 KB
実行使用メモリ 9,856 KB
最終ジャッジ日時 2024-07-06 02:54:11
合計ジャッジ時間 4,929 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#ifdef __MAI
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
//#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#else
#include <bits/stdc++.h>
#endif
using namespace std;
typedef unsigned int uint;
typedef long long int ll;
typedef unsigned long long int ull;
#define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout<<e<<" ";}cout<<endl;
#define debugm(m) printf("L%d %s is..\n",__LINE__,#m);for(auto v:m){for(auto e:v){cout<<e<<" ";}cout<<endl;}
#define debuga(m,w) printf("L%d %s is => ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout<<endl;
#define debugaa(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[x][y]<<" ";}cout<<endl;}
#define debugaar(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[y][x]<<" ";}cout<<endl;}
#define ALL(v) (v).begin(),(v).end()
#define BIGINT 0x7FFFFFFF
#define E107 1000000007ll
void printbit(int u) { if (u == 0)cout << 0; else { int s = 0, k = 0; for (; 0<u; u >>= 1, k++)s = (s << 1) | (u & 1); for (; 0<k--; s >>= 1)cout <<
    (s & 1); } }
#define TIME chrono::system_clock::now()
#define MILLISEC(t) (chrono::duration_cast<chrono::milliseconds>(t).count())
namespace {
std::chrono::system_clock::time_point t;
void tic() { t = TIME; }
void toc() { fprintf(stderr, "TIME : %lldms\n", MILLISEC(TIME - t)); }
std::chrono::system_clock::time_point tle = TIME;
#ifdef __MAI
void safe_tle(int msec) { assert(MILLISEC(TIME - tle) < msec); }
#else
#define safe_tle(k) ;
#endif
}
template<typename T1, typename T2>
ostream& operator <<(ostream &o, const pair<T1, T2> p) { o << "(" << p.first << ":" << p.second << ")"; return o; }
random_device noize; // noize
mt19937 mt(noize());
int rand_int(int l, int h) {
uniform_int_distribution<> range(l, h);
return range(mt);
}
#ifndef __MAI
namespace {
class MaiScanner {
public:
template<typename T>
void input_integer(T& var) {
var = 0;
T sign = 1;
int cc = getchar_unlocked();
for (; cc<'0' || '9'<cc; cc = getchar_unlocked())
if (cc == '-') sign = -1;
for (; '0' <= cc&&cc <= '9'; cc = getchar_unlocked())
var = (var << 3) + (var << 1) + cc - '0';
var = var*sign;
}
void ign() { getchar_unlocked(); }
MaiScanner& operator>>(int& var) {
input_integer<int>(var);
return *this;
}
MaiScanner& operator>>(long long& var) {
input_integer<long long>(var);
return *this;
}
};
class MaiPrinter {
int stack_p;
char stack[32];
public:
template<typename T>
void output_integer(T var) {
if (var == 0) {
putchar_unlocked('0');
return;
}
if (var < 0) {
putchar_unlocked('-');
var = -var;
}
stack_p = 0;
while (var) {
stack[stack_p++] = '0' + (var % 10);
var /= 10;
}
while (stack_p)
putchar_unlocked(stack[--stack_p]);
}
MaiPrinter& operator<<(char c) {
putchar_unlocked(c);
return *this;
}
MaiPrinter& operator<<(int var) {
output_integer<int>(var);
return *this;
}
MaiPrinter& operator<<(long long var) {
output_integer<long long>(var);
return *this;
}
};
}
MaiScanner scanner;
MaiPrinter printer;
#else
#define scanner cin
#endif
class Graph {
public:
class adjacent {
public:
Graph& g;
int id;
adjacent(Graph& g, int id) :g(g), id(id) {}
class iterator {
public:
adjacent& ref;
int pointer;
iterator(adjacent& ref, int p = 0) :ref(ref), pointer(p) {}
iterator& operator ++() {
++pointer; return *this;
}
const int& operator*() const {
int n1 = ref.g.vertex_to[ref.id].size();
return pointer<n1 ? ref.g.vertex_to[ref.id][pointer] : ref.g.vertex_from[ref.id][pointer - n1];
}
int& operator*() {
int n1 = ref.g.vertex_to[ref.id].size();
return pointer<n1 ? ref.g.vertex_to[ref.id][pointer] : ref.g.vertex_from[ref.id][pointer - n1];
}
bool operator!=(const iterator& it) const {
return it.pointer != pointer;
}
};
iterator begin() { return iterator(*this, 0); }
iterator end() { return iterator(*this, g.vertex_to[id].size() + g.vertex_from[id].size()); }
};
size_t n;
vector<vector<int>> vertex_to;
vector<vector<int>> vertex_from;
Graph(size_t n) :n(n), vertex_to(n), vertex_from(n) {}
void connect(int from, int to) {
vertex_to[from].emplace_back(to);
vertex_from[to].emplace_back(from);
}
void resize(size_t _n) {
n = _n;
vertex_to.resize(_n);
vertex_from.resize(_n);
}
// for (auto to : g.vertex_adjacent(vertex_id)) 使
adjacent vertex_adjacent(int idx) {
return adjacent(*this, idx);
}
size_t degree(int v) {
return vertex_to[v].size() + vertex_from[v].size();
}
void reverse_direction() {
vertex_from.swap(vertex_to);
}
};
/* ============ */
int n, m, kei;
int width, height;
int field[111][111];
int gx, gy;
//pair<double,int> kuri[111];
int hako[1010][3];
int hakodp[1010][1010];
Graph g(1);
int ahodfs(int u) {
int r = 1;
fprintf(stderr, "%d\n", u);
for (int v : g.vertex_to[u]) {
r = max(r, ahodfs(v) + 1);
}
//fprintf(stderr,"%d\n",r);
return r;
}
int main() {
int i, j, k;
int x, y, z;
int a, b, c, d;
scanner >> n;
g.resize(n);
for (i = 0; i < n; ++i) {
scanner >> x >> y >> z;
hako[i][0] = x;
hako[i][1] = y;
hako[i][2] = z;
}
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
if ((hako[i][0] < hako[j][0] && hako[i][1] < hako[j][1] && hako[i][2] < hako[j][2]) ||
(hako[i][0] < hako[j][0] && hako[i][1] < hako[j][2] && hako[i][2] < hako[j][1]) ||
(hako[i][0] < hako[j][1] && hako[i][1] < hako[j][0] && hako[i][2] < hako[j][2]) ||
(hako[i][0] < hako[j][1] && hako[i][1] < hako[j][2] && hako[i][2] < hako[j][0]) ||
(hako[i][0] < hako[j][2] && hako[i][1] < hako[j][0] && hako[i][2] < hako[j][1]) ||
(hako[i][0] < hako[j][2] && hako[i][1] < hako[j][1] && hako[i][2] < hako[j][0])) {
g.connect(i, j);
}
}
}
//visit.resize(n);
vector<int> rank(n,1);
int result = 1;
for (int u = 0; u < n; ++u) {
queue<int> q;
q.push(u);
while (!q.empty()) {
k = q.front();q.pop();
for (int v : g.vertex_to[k]) {
if (rank[v] < rank[k] + 1){
rank[v] = rank[k] + 1;
result = max(result, rank[v]);
q.push(v);
}
}
}
}
cout << result << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0