Submission #1093842

# Submission time Handle Problem Language Result Execution time Memory
1093842 2024-09-27T16:05:47 Z akim9905 Telegraph (JOI16_telegraph) C++17
0 / 100
1 ms 2652 KB
#include <bits/stdc++.h>
using namespace std;

#define fileio() freopen("input.txt","r",stdin); freopen("output.txt","w",stdout)
#define fio() ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define allr(x) x.rbegin(), x.rend()
#define cmprs(x) sort(all(x)),x.erase(unique(all(x)),x.end())
#define endl "\n"
#define sp " "
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define rz resize
#define sz(a) (int)(a.size())
#define clr(a) a.clear()

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef tuple<int, int, int> tpi;
typedef tuple<ll, ll, ll> tpl;
typedef pair<double, ll> pdl;
typedef pair<double, int> pdi;

const int dx[] = {1,-1,0,0,1,1,-1,-1};
const int dy[] = {0,0,1,-1,1,-1,1,-1};
const ll MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int MAX = 101010; // PLZ CHK!

int N,G[MAX],C[MAX],V[MAX],F[MAX],inc[MAX];
vector<int> IN[MAX];
vector<vector<int>> CY;

void dfs(int cur, pii &c) {
    V[cur]=1;
    int nxt=G[cur];
    if (V[nxt]) {
        if (!F[nxt]) c={nxt,cur};
    }
    else dfs(nxt,c);
    F[cur]=1;
}

int main() {
    fio();
    cin>>N;
    for (int i=1; i<=N; i++) {
        cin>>G[i]>>C[i];
        IN[G[i]].pb(C[i]);
    }      

    for (int i=1; i<=N; i++) {
        if (V[i]) continue;

        pii c={-1,-1};
        dfs(i,c);
        if (c==pii(-1,-1)) continue;
        
        vector<int> cy;
        for (int x=c.first;; x=G[x]) {
            cy.pb(x);
            if (x==c.second) break;
        }
        for (int x:cy) inc[x]=1;
        CY.pb(cy);

        if (sz(cy)==N) {
            cout<<0;
            return 0;
        }
    }

    for (int i=1; i<=N; i++) sort(all(IN[i]),greater<>());

    ll sum=0;
    for (int i=1; i<=N; i++) sum+=C[i];

    for (int i=1; i<=N; i++) {
        if (inc[i]||IN[i].empty()) continue;
        sum-=IN[i][0];
    }

    ll ans=0;
    for (auto cy:CY) {
        ll sum=0;
        for (int u:cy) sum+=IN[u][0]; 

        ll mx=0;
        for (int u:cy) {
            int v=G[u];
            ll t=sum;
            t-=C[u];
            if (IN[v][0]==C[u]) {
                if (1<sz(IN[v])) t+=IN[v][1];
            }
            mx=max(mx,t);
        }
        ans+=mx;
    }

    cout<<sum-ans<<endl;
    
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Incorrect 1 ms 2652 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Incorrect 1 ms 2652 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Incorrect 1 ms 2652 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Incorrect 1 ms 2652 KB Output isn't correct
3 Halted 0 ms 0 KB -