結果
問題 | No.517 壊れたアクセサリー |
ユーザー |
|
提出日時 | 2020-07-17 14:58:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,925 bytes |
コンパイル時間 | 1,535 ms |
コンパイル使用メモリ | 92,024 KB |
最終ジャッジ日時 | 2025-01-11 21:45:46 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 15 |
ソースコード
#include <algorithm>#include <iostream>#include <stack>#include <vector>using namespace std;vector<bool> have;int tour(const vector<vector<int>> &g, vector<int> *path, size_t len) {int n = static_cast<int>(g.size());vector<int> indeg(n), utdeg(n);for(int u=0; u<n; ++u) {for(int v : g[u]) {++indeg[v];++utdeg[u];}}int k = n;for(int v=0; v<n; ++v) {if(indeg[v] == utdeg[v]) { --k; }}for(int u=0; u<n; ++u) {if(!have[u]) { continue; }if(k == 0 || (k == 2 && utdeg[u]-indeg[u] == 1)) {*path = vector<int>();stack<int> stk;stk.push(u);vector<size_t> idx(n);while(!stk.empty()) {int v = stk.top(); stk.pop();while(idx[v] < g[v].size()) {stk.push(v);v = g[v][idx[v]++];}path->push_back(v);}if(path->size() == len) {return 1 + (k == 0);}}}return 0;}int main(void) {int N; cin >> N;vector<int> nxt(26, -1);have.assign(26, false);vector<vector<int>> G(26, vector<int>());size_t len = 0;for(int loop=0; loop<N; ++loop) {string s; cin >> s;len += s.size();for(int i=0, n=static_cast<int>(s.size()); i<n-1; ++i) {int u = s[i] - 'A',v = s[i+1] - 'A';nxt[u] = v;have[u] = true;G[u].push_back(v);}have[s.back() - 'A'] = true;}int M; cin >> M;for(int loop=0; loop<M; ++loop) {string s; cin >> s;for(int i=0, n=static_cast<int>(s.size()); i<n-1; ++i) {int u = s[i] - 'A',v = s[i+1] - 'A';if(nxt[u] == -1) {G[u].push_back(v);}}}vector<int> path;int state = tour(G, &path, len);if(!state) {puts("-1");return 0;}reverse(path.begin(), path.end());string res;for(int vi : path) { res += static_cast<char>(vi + 'A'); }cout << res << '\n';return 0;}