# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
105769 | 2019-04-14T12:08:01 Z | dimash241 | Telegraph (JOI16_telegraph) | C++17 | 15 ms | 14464 KB |
# include <stdio.h> # include <bits/stdc++.h> #define _USE_MATH_DEFINES_ #define ll long long #define ld long double #define Accepted 0 #define pb push_back #define mp make_pair #define sz(x) (int)(x.size()) #define every(x) x.begin(),x.end() #define F first #define S second #define For(i,x,y) for (int i = x; i <= y; i ++) #define FOr(i,x,y) for (int i = x; i >= y; i --) #define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0) // ROAD to... Red using namespace std; inline double Time() {return (clock() * 1.0) / CLOCKS_PER_SEC; } inline bool isvowel (char c) { c = tolower(c); if (c == 'a' || c == 'e' || c == 'i' || c == 'y' || c == 'o' || c == 'u') return 1; return 0; } const double eps = 0.000001; const ld pi = acos(-1); const int maxn = 1e7 + 9; const int mod = 1e9 + 7; const ll MOD = 1e18 + 9; const ll INF = 1e18 + 123; const int inf = 2e9 + 11; const int mxn = 1e6 + 9; const int N = 6e5 + 123; const int M = 22; const int pri = 997; const int Magic = 2101; const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, -1, 0, 1}; #define int long long int n, m, k; int p[N], c[N]; int u[N]; int cnt[N]; ll dp[N], sum; int val[N]; vector < int > g[N]; void dfs (int v) { u[v] = 2; for (auto to : g[v]) { if (u[to] == 2) continue; dfs(to); dp[v] += dp[to]; dp[v] += c[to]; val[v] = max(val[v], c[to]); } dp[v] -= val[v]; } ll solve (vector < int > &cycle) { ll f[2] = {0, 0}; f[1] = INF; int m = cycle.size(); for(int j = 0; j < m; j ++) { int v = cycle[j], nxt = cycle[(j + 1) % m]; dfs(v); f[1] = min(f[1] + dp[v] + val[v], f[0] + dp[v] + c[nxt]); f[0] += dp[v] + val[v]; f[0] = min(f[1], f[0]); } return f[1]; } main () { scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d%d", &p[i], &c[i] ); g[p[i]].pb(i); cnt[p[i]] ++; sum += c[i]; } ll res = 0; for (int i = 1; i <= n; i ++) { if (u[i]) continue; int v = i; while (!u[v]) { u[v] = 1; v = p[v]; } vector < int > cycle; while (u[v] != 2) { u[v] = 2; cycle.pb(v); v = p[v]; } if (cycle.size() == n) { cout << 0; exit(0); } res += solve(cycle); } printf("%lld\n", res); return Accepted; } // B...a D....
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 14464 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 14464 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 14464 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 14464 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |