제출 #1141235

#제출 시각아이디문제언어결과실행 시간메모리
1141235harry_tm_18Jobs (BOI24_jobs)C++17
0 / 100
6 ms6208 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 1e5; vector<int> adj[N]; int dfs(int node, vector<pair<int, int>>& job, vector<bool>& vis) { vis[node] = true; int sum = job[node].first; for (auto i : adj[node]) { if (!vis[i]) { sum += dfs(i, job, vis); } } return sum; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, s; cin >> n >> s; vector<pair<int, int>> job(n); for (int i = 0; i < n; ++i) { cin >> job[i].first >> job[i].second; if (job[i].second != 0) { adj[i].push_back(job[i].second - 1); } } vector<int> dp(n, 0); vector<bool> vis(n, false); dp[0] = max(job[0].first + s, s); vis[0] = dp[0] == job[0].first + s; for (int i = 1; i < n; ++i) { if (job[i].second == 0) { dp[i] = max(dp[i - 1], dp[i - 1] + job[i].first); } else { int parent = job[i].second - 1; if (!vis[parent]) { dp[i] = dp[i - 1] + dfs(parent, job, vis); } dp[i] = max(dp[i - 1], dp[i] + job[i].first); } vis[i] = dp[i] != dp[i - 1]; } cout << dp[n - 1] - s << endl; return 0; }
#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...