結果
問題 |
No.2998 Rainbow Christmas Tree
|
ユーザー |
👑 ![]() |
提出日時 | 2024-12-23 03:06:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 110 ms / 3,000 ms |
コード長 | 1,901 bytes |
コンパイル時間 | 971 ms |
コンパイル使用メモリ | 82,780 KB |
最終ジャッジ日時 | 2025-02-26 16:10:17 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 58 |
ソースコード
#ifdef NACHIA #define _GLIBCXX_DEBUG #else #define NDEBUG #endif #include <iostream> #include <string> #include <vector> #include <algorithm> using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i<int(n); i++) const i64 INF = 1001001001001001001; template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; } template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; } using namespace std; void testcase(){ int N, K; cin >> N >> K; vector<vector<int>> P(N-1); rep(i,N-1){ P[i].resize(N); rep(a,N){ cin >> P[i][a]; P[i][a]--; } } vector<pair<int,int>> H(N, {-1,-1}); H[N-1] = {-2,-1}; vector<pair<int,int>> I(N, {-1,-1}); I[0] = {-2,-1}; for(int i=0; i<K; i++){ for(int a=0; a<N; a++) if(a != 0 && H[a].first != -1 && H[a].first != i){ if(H[P[i][a]].first == -1) H[P[i][a]] = {i,a}; } } for(int i=K; i<N-1; i++){ for(int a=0; a<N; a++) if(a != N-1 && I[a].first != -1 && I[a].first != i){ if(I[P[i][a]].first == -1) I[P[i][a]] = {i,a}; } } int root = -1; rep(i,N) if(H[i].first != -1 && I[i].first != -1) root = i; vector<int> used(N); vector<int> res(N, -2); res[root] = -1; for(int p=root; H[p].first>=0; p=H[p].second){ res[H[p].second] = H[p].first; used[H[p].first] = 1; } for(int p=root; I[p].first>=0; p=I[p].second){ res[I[p].second] = I[p].first; used[I[p].first] = 1; } rep(i,N-1) if(!used[i]){ rep(a,N) if(P[i][a] != -1 && res[a] == -2 && res[P[i][a]] != -2){ res[a] = i; used[i] = 1; break; } } cout << "Yes\n"; rep(i,N){ if(i) cout << " "; cout << (res[i]+1); } cout << "\n"; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); testcase(); return 0; }