Submission #1244897

#TimeUsernameProblemLanguageResultExecution timeMemory
1244897altern23Islands (IOI08_islands)C++20
24 / 100
610 ms196608 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double const int MAXN = 1e6; const ll INF = 1e18; const int MOD = 998244353; const ld eps = 1e-6; struct DSU{ ll N; vector<ll> par; DSU(ll _n){ N = _n; par.resize(N + 5); for(int i = 1; i <= N; i++) par[i] = i; } ll find(ll idx){ return (par[idx] == idx ? idx : par[idx] = find(par[idx])); } bool join(ll a, ll b){ a = find(a), b = find(b); if(a == b) return false; par[b] = a; return true; } }; vector<pii> adj[MAXN + 5]; ll vis[MAXN + 5], dp[MAXN + 5][2]; void dfs(ll idx){ vis[idx] = 1; ll sum = 0; vector<ll> v; for(auto [i, j] : adj[idx]){ if(!vis[i]){ dfs(i); sum += max(dp[i][0], dp[i][1]); v.push_back(dp[i][0] + j - max(dp[i][0], dp[i][1])); } } dp[idx][0] = sum; sort(v.begin(), v.end(), greater<ll>()); if(v.size() >= 1){ dp[idx][0] = max(dp[idx][0], sum + v[0]); } if(v.size() >= 2){ dp[idx][1] = max(dp[idx][1], sum + v[0] + v[1]); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll N; cin >> N; vector<pair<ll, pii>> edges; for(int i = 1; i <= N; i++){ ll idx, val; cin >> idx >> val; edges.push_back({val, {i, idx}}); } sort(edges.begin(), edges.end(), greater<pair<ll, pii>>()); DSU dsu(N); for(auto [w, node] : edges){ if(dsu.join(node.fi, node.sec)){ adj[node.fi].push_back({node.sec, w}); adj[node.sec].push_back({node.fi, w}); } } ll ans = 0; for(int i = 1; i <= N; i++){ if(!vis[i]){ dfs(i); ans += max(dp[i][0], dp[i][1]); } } cout << ans << "\n"; } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...