제출 #510194

#제출 시각아이디문제언어결과실행 시간메모리
510194Yazan_AlattarIslands (IOI08_islands)C++14
40 / 100
2059 ms31008 KiB
#include <iostream> #include <fstream> #include <vector> #include <cstring> #include <algorithm> #include <set> #include <map> #include <queue> #include <list> #include <utility> #include <cmath> #include <numeric> #include <assert.h> using namespace std; typedef long long ll; #define F first #define S second #define pb push_back #define endl "\n" #define all(x) x.begin(), x.end() const int M = 200007; const ll inf = 1e18; const ll mod = 1e9 + 7; const double pi = acos(-1); const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1}; vector < pair < int,ll > > adj[M]; ll n, ans, grp[M], mx[M], curgroup; bool vist[M], on[M]; void connect(int node) { grp[node] = curgroup; vist[node] = 1; for(auto i : adj[node]){ if(vist[i.F]) continue; connect(i.F); } return; } ll dfs(int node, ll cost) { ll ret = cost; on[node] = 1; for(auto i : adj[node]){ if(on[i.F]) continue; ret = max(ret, dfs(i.F, cost + i.S)); } on[node] = 0; return ret; } int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n; for(int i = 1; i <= n; ++i){ ll x, y; cin >> x >> y; adj[x].pb({i, y}); adj[i].pb({x, y}); } for(int i = 1; i <= n; ++i){ curgroup = i; if(!grp[i]) connect(i); mx[grp[i]] = max(mx[grp[i]], dfs(i, 0)); } for(int i = 1; i <= n; ++i) ans += mx[i]; cout << ans << endl; return 0; }
#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...