結果
問題 | No.1401 全自動マクロの作り方 |
ユーザー |
![]() |
提出日時 | 2021-02-19 19:13:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 3,153 ms |
コード長 | 2,209 bytes |
コンパイル時間 | 2,066 ms |
コンパイル使用メモリ | 202,848 KB |
最終ジャッジ日時 | 2025-01-18 23:03:24 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 7 |
ソースコード
#line 1 "code.cpp"//#include"testlib.h"#include<bits/stdc++.h>using namespace std;using lint=long long;#line 4 "cpplib/graph_tree/topological_sort.hpp"/*** @brief トポロジカルソート*/std::vector<int>tsort(std::vector<std::vector<int>>G){std::vector<int> in(G.size(),0);std::vector<int> vis(G.size(),0);std::vector<int> res;for(int i=0;i<(int)G.size();i++)for(int j=0;j<(int)G[i].size();j++){in[G[i][j]]++;}for(int i=0;i<(int)G.size();++i){auto dfs=[&](auto dfs,int v)->void{vis[v]=1;res.push_back(v);for(auto e:G[v]){in[e]--;if(in[e]==0)dfs(dfs,e);}};if(vis[i]==0&&in[i]==0)dfs(dfs,i);}return res;}#line 6 "code.cpp"const lint N_MIN=1,N_MAX=2000;const lint D_MIN=1,D_MAX=2000;const lint S_MIN=0,S_MAX=2000;// int main(int argc, char** argv){// //registerValidation(argc, argv);// int n=inf.readInt(N_MIN,N_MAX);// inf.readEoln();// vector<vector<int>> g(2000);// int s=0;// vector<vector<int>>v(n);// for(int i=0;i<n;++i){// int d=inf.readInt(D_MIN,D_MAX);// s+=d;// v[i].resize(d);// for(int j=0;j<d;++j){// inf.readSpace();// v[i][j]=inf.readInt(S_MIN,S_MAX);// }// inf.readEoln();// if(v[i][0]!=v[i].back())g[v[i][0]].push_back(v[i].back());// }// inf.readEof();// assert(s<=2000);// for(int i=0;i<n;++i)for(int j=0;j<(int)v[i].size();++j){// assert(v[i][j]<s);// }// auto d=tsort(g);// if(d.size()!=2000){// cout<<0<<endl;// }else{// cout<<d.size()<<endl;// for(int i=0;i<(int)d.size();++i){// cout<<d[i]<<" "<<" \n"[i==d.size()-1];// }// }// }int main(){lint n;cin>>n;vector<vector<int>> g(2000);for(int i=0;i<n;++i){lint d;cin>>d;vector<int> v(d);for(int j=0;j<d;++j)cin>>v[j];if(v[0]!=v.back())g[v[0]].push_back(v.back());}auto d=tsort(g);if(d.size()!=2000){cout<<0<<endl;}else{cout<<d.size()<<endl;for(int i=0;i<(int)d.size();++i)cout<<d[i]<<" \n"[i==(int)d.size()-1];}}