Submission #673353

#TimeUsernameProblemLanguageResultExecution timeMemory
673353viwlesxqBiochips (IZhO12_biochips)C++17
90 / 100
339 ms399540 KiB
/*#include <bits/stdc++.h> using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vll vector<ll> #define vii vector<int> #define vpii vector<pii> #define vpll vector<pll> template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} const int N = 2e5+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); int n, m, k, timer, root, tin[N], w[N], vv[N], dp[N][505]; vii edges[N]; void dfs(int u){ int tmp = timer; for(auto x:edges[u]) dfs(x); vv[timer] = w[u]; tin[timer] = tmp; timer++; } void solve(){ cin>>n>>m; timer = 1; for(int i=1;i<=n;i++){ cin>>k>>w[i]; edges[k].pb(i); if(k == 0) root = i; } dfs(root); for(int i=0;i<=n;i++){ for(int j=1;j<=m;j++) dp[i][j] = -mod; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ dp[i][j] = max(dp[i-1][j], dp[tin[i]-1][j-1]+vv[i]); } } cout<<dp[n][m]<<endl; return; } signed main(){ fastios int t = 0; if(!t) solve(); else { cin>>t; while (t--) solve(); } return 0; }*/ #include <bits/stdc++.h> using namespace std; using ll = int64_t; using str = string; #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front #define F first #define S second #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() const int N = 2e5 + 1, M = 5e2 + 1, inf = 1e9 + 7; vector <int> g[N]; int dp[N][M], p[N], x[N], timer = 1, tin[N], arr[N]; void dfs(int v) { int in = timer; for (int to : g[v]) dfs(to); tin[timer] = in; arr[timer] = x[v]; timer++; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; int root = -1; for (int i = 1; i <= n; i++) { cin >> p[i] >> x[i]; if (!p[i]) root = i; g[p[i]].pb(i); } dfs(root); for (int i = 0; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] = -inf; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] = max(dp[i - 1][j], dp[tin[i] - 1][j - 1] + arr[i]); } } cout << dp[n][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...