結果
問題 | 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;}