27分求助
查看原帖
27分求助
750803
_Revenge_楼主2023/1/8 21:49
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db;

const int N = 1e5 + 50;
const int M = 1e5 + 50;
const int Mod = 1e9 + 7;

#define int long long

inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

int n;

int p[N], v[N];

bool vis[N];

int ans = 0;

int dfs(int u, int Min)
{
    vis[u] = 1;
    if (vis[p[u]])
        return min(Min, v[u]);
    return dfs(p[u], min(Min, v[u]));
}

signed main()
{
    n = read();
    for (int i = 1; i <= n; ++i)
        p[i] = read(), v[i] = read(), ans += v[i];
    for (int i = 1; i <= n; ++i)
    {
        if (!vis[i])
        {
            ans -= dfs(i, Mod);
        }
    }
    printf("%lld\n", ans);
    return 0;
}
2023/1/8 21:49
加载中...