Submission #120382

# Submission time Handle Problem Language Result Execution time Memory
120382 2019-06-24T09:52:44 Z nvmdava Islands (IOI08_islands) C++17
35 / 100
1074 ms 131072 KB
#include <bits/stdc++.h>
using namespace std;
#define N 1000001

vector<pair<int, long long> > adj[N];
bool in[N];
vector<int> s;
vector<int> cyc;
vector<long long> dp, p;
bool inCyc[N];
long long res, t;

long long dfs(int v, int p){
	long long b1 = 0, b2 = 0;
	for(auto xx : adj[v]){
		int x = xx.first;
		long long c = xx.second;
		
		if(inCyc[x] && (p == x || p == 0) && inCyc[v]){
			t = c;
		}
		if(inCyc[x] || p == x) continue;
		auto q = dfs(x, v);
		
		long long up = q + c;
		if(b1 < up){
			b2 = b1;
			b1 = up;
		} else b2 = max(b2, up);
	}
	res = max(res, b1 + b2);
	return b1;
}

long long ans = 0;

void solve(){
	dp.clear();
	p.clear();
	cyc.clear();
	res = 0;
	long long full = 0;
	for(int x : s){
		if(inCyc[x]) {	
			dp.push_back(dfs(x, cyc.empty() ? 0 : cyc.back()));
			if(p.empty()) full = t;
			p.push_back(p.empty() ? 0 : p.back() + t);
			cyc.push_back(x);
		}
	}
	full += p.back();
	long long tmpp = dp[0] + p[0];
	long long tmpm = dp[0] - p[0];
	for(int i = 1; i < cyc.size(); i++){
		res = max(res, tmpm + dp[i] + p[i]);
		res = max(res, tmpp + full + dp[i] - p[i]);
		tmpm = max(tmpm, dp[i] - p[i]);
		tmpp = max(tmpp, dp[i] + p[i]);
	}
	ans += res;
}

int trav(int i, int p){
	s.push_back(i);
	in[i] = 1;
	int res = 0;
	bool ok = 0;
	for(auto xx : adj[i]){
		int x = xx.first;
		if(p == x && ok == 0){
			ok = 1;	
			continue;
		}
		if(in[x]){
			res = x;
			continue;
		}
		int t = trav(x, i);
		if(res < t)res = t;
	}
	if(res) inCyc[i] = 1;
	if(res == i) return 0;
	return res;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	
	for(int i = 1; i <= n; i++){
		int e;
		long long l;
		cin>>e>>l;
		adj[e].push_back({i, l});
		adj[i].push_back({e, l});
	}
	
	for(int i = 1; i <= n; i++){
		if(in[i]) continue;
		s.clear();		
		trav(i, 0);
		solve();
	}
	
	cout<<ans;
}

Compilation message

islands.cpp: In function 'void solve()':
islands.cpp:54:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < cyc.size(); i++){
                 ~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 22 ms 23808 KB Output is correct
2 Incorrect 21 ms 23936 KB Output isn't correct
3 Correct 21 ms 23928 KB Output is correct
4 Correct 20 ms 23808 KB Output is correct
5 Correct 21 ms 23928 KB Output is correct
6 Incorrect 20 ms 23808 KB Output isn't correct
7 Incorrect 20 ms 23808 KB Output isn't correct
8 Incorrect 21 ms 23808 KB Output isn't correct
9 Incorrect 20 ms 23780 KB Output isn't correct
10 Correct 20 ms 23800 KB Output is correct
11 Incorrect 21 ms 23808 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 23936 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 23936 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 28 ms 24952 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 56 ms 28708 KB Output is correct
2 Correct 57 ms 30900 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 116 ms 37284 KB Output is correct
2 Correct 122 ms 42552 KB Output is correct
3 Incorrect 147 ms 51944 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 172 ms 46364 KB Output is correct
2 Correct 221 ms 74820 KB Output is correct
3 Correct 248 ms 81184 KB Output is correct
4 Correct 307 ms 101188 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 347 ms 95292 KB Output is correct
2 Correct 1074 ms 131072 KB Output is correct
3 Correct 333 ms 78840 KB Output is correct
4 Correct 472 ms 119268 KB Output is correct
5 Incorrect 458 ms 123212 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 427 ms 131072 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -