結果
問題 |
No.497 入れ子の箱
|
ユーザー |
![]() |
提出日時 | 2025-02-22 18:14:46 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 12 ms / 5,000 ms |
コード長 | 1,158 bytes |
コンパイル時間 | 3,626 ms |
コンパイル使用メモリ | 277,840 KB |
実行使用メモリ | 20,712 KB |
最終ジャッジ日時 | 2025-02-22 18:14:51 |
合計ジャッジ時間 | 5,269 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include<bits/stdc++.h> #define int long long using namespace std; struct node{ int x,y,z; }box[1010]; struct edge{ int to,next; }a[1000010]; int head[1000010],dp[1000010],cnt,ans; bool f[1010]; void add(int u,int v) { a[++cnt].to=v; a[cnt].next=head[u]; head[u]=cnt++; } bool cmp(node x,node y) { return x.x<y.x; } bool check(node x,node y) { if(x.x<y.x&&x.y<y.y&&x.z<y.z) return 1; return 0; } int dfs(int u) { f[u]=1; if(dp[u]) return dp[u]; int mx=0; for(int i=head[u];i;i=a[i].next) mx=max(mx,dfs(a[i].to)); if(!head[u]) return 1; return dp[u]=mx+1; } signed main() { //freopen("box.in","r",stdin); //freopen("box.out","w",stdout); int n,x,y,z; cin>>n; for(int i=1;i<=n;i++) { cin>>box[i].x>>box[i].y>>box[i].z; x=min(min(box[i].x,box[i].y),box[i].z); z=max(max(box[i].x,box[i].y),box[i].z); y=box[i].x+box[i].y+box[i].z-x-z; box[i].x=x; box[i].y=y; box[i].z=z; } sort(box+1,box+n+1,cmp); for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(check(box[i],box[j])) add(i,j); } } for(int i=1;i<=n;i++) { if(!f[i]) dfs(i),ans=max(ans,dp[i]); } cout<<max(ans,1ll)<<endl; return 0; }