Submission #520667

#TimeUsernameProblemLanguageResultExecution timeMemory
520667HaYoungJoonRima (COCI17_rima)C++14
56 / 140
273 ms160572 KiB
#include <bits/stdc++.h> using namespace std; const int maxsize = 3*1e5; int trie[3000001][26], timer = 0; int dp[3000001], n, res = 0; string a[500001]; vector<int> adj[3000001]; void addString(string s) { int cur = 0; for (char c: s) { int val = c - 'a'; if (!trie[cur][val]) { adj[cur].emplace_back(++timer); trie[cur][val] = timer; } cur = trie[cur][val]; } dp[cur]++; } void DFS(int u) { int maxnhanh1 = 0, maxnhanh2 = 0; for (int v: adj[u]) { DFS(v); if (dp[v] > maxnhanh1) { maxnhanh2 = maxnhanh1; maxnhanh1 = dp[v]; } else maxnhanh2 = max(maxnhanh2,dp[v]); } res = max(res,maxnhanh1 + maxnhanh2); res = max(dp[u],res); if (dp[u] && maxnhanh1) { for (int v: adj[u]) dp[u] += (dp[v] > 0); dp[u] += maxnhanh1 - 1; res = max(dp[u],res); } if (maxnhanh1) { int total = 0; for (int v: adj[u]) total += (dp[v] > 0); total += maxnhanh1 - 1; res = max(res,total); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; reverse(a[i].begin(),a[i].end()); } for (int i = 1; i <= n; i++) addString(a[i]); DFS(0); cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...