#include <bits/stdc++.h>
#define ss second
#define ff first
#define int long long
#define en '\n'
#define pb push_back
#define pii pair<int, int>
#define vi vector<int>
#define f(st, x, d) for (int i = st; i < x; i += d)
#define carray(x) for (auto k : x) cout << k << ' ';
#define all(x) begin(x), end(x)
using namespace std;
const int mod = 1e9 + 9;
const int N = 2e5 + 5;
const int INF = 1e9;
int f[N], w[N], g[N], a[N], deg[N], ans;
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> w[i];
deg[a[i]]++;
}
queue<int> q;
for (int i = 1; i <= n; i++) if (deg[i] == 0) q.push(i);
while (!q.empty()) {
int p = q.front();
int contribution = f[p] + w[p];
g[a[p]] = max({g[a[p]], f[a[p]] + contribution, g[p]});
if(f[a[p]] < contribution) f[a[p]] = contribution;
deg[a[p]]--;
q.pop();
if (deg[a[p]] == 0) q.push(a[p]);
}
for (int i = 1; i <= n; i++) {
if (deg[i] > 0) {
int start = i, p = a[i];
int max1 = f[start], max2 = f[start], sum = w[start], maxAns1 = g[start], maxAns2 = -1e18;
for (; p != start; p = a[p]) {
maxAns1 = max({maxAns1, g[p], f[p] + sum + max1});
maxAns2 = max(maxAns2, f[p] - sum + max2);
max1 = max(max1, f[p] - sum);
max2 = max(max2, f[p] + sum);
sum += w[p];
deg[p] = 0;
}
ans += max(maxAns1, maxAns2 + sum);
}
}
cout << ans << '\n';
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
//cin >> t;
while (t--) solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |