Submission #1156940

#TimeUsernameProblemLanguageResultExecution timeMemory
1156940SmuggingSpunMagic Tree (CEOI19_magictree)C++20
6 / 100
1451 ms175176 KiB
#include<bits/stdc++.h> #define taskname "B" using namespace std; typedef long long ll; template<class T>void maximize(T& a, T b){ if(a < b){ a = b; } } const int lim = 1e5 + 5; int n, m, k, parent[lim], vertex[lim], day[lim], weight[lim]; vector<int>g[lim]; namespace sub1{ void solve(){ vector<int>low(n + 1), tail(n + 1); int euler = -1; auto dfs = [&] (auto&& self, int s) -> void{ low[s] = ++euler; for(int& d : g[s]){ self(self, d); } tail[s] = euler; }; dfs(dfs, 1); vector<pair<int, int>>fruit(n, make_pair(-1, 0)); for(int i = 1; i <= m; i++){ fruit[low[vertex[i]]] = make_pair(day[i] - 1, weight[i]); } vector<vector<ll>>f(k, vector<ll>(1 << n, -1)); auto dp = [&] (auto&& self, int p, int mask) -> ll{ if(p == k){ return 0; } ll& ans = f[p][mask]; if(ans != -1){ return ans; } ans = self(self, p + 1, mask); for(int i = 2; i <= n; i++){ if(1 << low[i] & mask){ int nxt = mask; ll add = 0; for(int j = low[i]; j <= tail[i]; j++){ if(1 << j & nxt){ nxt ^= 1 << j; if(fruit[j].first == p){ add += fruit[j].second; } } } maximize(ans, self(self, p, nxt) + add); } } return ans; }; cout << dp(dp, 0, (1 << n) - 1); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if(fopen(taskname".inp", "r")){ freopen(taskname".inp", "r", stdin); } cin >> n >> m >> k; for(int i = 2; i <= n; i++){ cin >> parent[i]; g[parent[i]].emplace_back(i); } for(int i = 1; i <= m; i++){ cin >> vertex[i] >> day[i] >> weight[i]; } if(max(n, k) <= 20){ sub1::solve(); } }

Compilation message (stderr)

magictree.cpp: In function 'int main()':
magictree.cpp:62:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...