結果
問題 | No.1494 LCS on Tree |
ユーザー |
![]() |
提出日時 | 2021-04-30 22:42:55 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,043 bytes |
コンパイル時間 | 2,035 ms |
コンパイル使用メモリ | 185,228 KB |
実行使用メモリ | 34,944 KB |
最終ジャッジ日時 | 2024-07-19 02:25:49 |
合計ジャッジ時間 | 5,087 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 WA * 4 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main(){int N;cin >> N;string S;cin >> S;int M = S.size();vector<vector<pair<char, int>>> E(N);for (int i = 0; i < N - 1; i++){int u, v;char c;cin >> u >> v >> c;u--;v--;E[u].push_back(make_pair(c, v));E[v].push_back(make_pair(c, u));}vector<int> p(N, -1);vector<char> p2(N);vector<vector<int>> c(N);queue<int> Q;Q.push(0);vector<int> bfs;while (!Q.empty()){int v = Q.front();Q.pop();bfs.push_back(v);for (auto P : E[v]){int w = P.second;if (w != p[v]){p[w] = v;p2[w] = P.first;c[v].push_back(w);Q.push(w);}}}reverse(bfs.begin(), bfs.end());vector<vector<int>> dp1(N, vector<int>(M + 1, 0));for (int v : bfs){for (int w : c[v]){for (int i = 0; i <= M; i++){dp1[v][i] = max(dp1[v][i], dp1[w][i]);}}for (int i = 0; i < M; i++){dp1[v][i + 1] = max(dp1[v][i + 1], dp1[v][i]);}if (v != 0){for (int i = M - 1; i >= 0; i--){if (S[i] == p2[v]){dp1[v][i + 1] = max(dp1[v][i + 1], dp1[v][i] + 1);}}}}vector<vector<int>> dp2(N, vector<int>(M + 1, 0));for (int v : bfs){for (int w : c[v]){for (int i = M; i >= 0; i--){dp2[v][i] = max(dp2[v][i], dp2[w][i]);}}for (int i = M - 1; i >= 0; i--){dp2[v][i] = max(dp2[v][i], dp2[v][i + 1]);}if (v != 0){for (int i = 0; i < M; i++){if (S[i] == p2[v]){dp2[v][i] = max(dp2[v][i], dp2[v][i + 1] + 1);}}}}int ans = 0;for (int v : bfs){vector<int> mx1(M + 1, 0);vector<int> mx2(M + 1, 0);for (int w : c[v]){for (int i = 0; i <= M; i++){ans = max(ans, mx1[i] + dp2[w][i]);mx1[i] = max(mx1[i], dp1[w][i]);ans = max(ans, mx2[i] + dp1[w][i]);mx2[i] = max(mx2[i], dp2[w][i]);}}}cout << ans << endl;}