Submission #198795

# Submission time Handle Problem Language Result Execution time Memory
198795 2020-01-27T17:16:43 Z arnold518 Islands (IOI08_islands) C++14
90 / 100
890 ms 131076 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 1e6;

int N;
vector<pii> adj[MAXN+10];
pii to[MAXN+10];
ll ans;

bool vis[MAXN+10];

ll dfs(int now, ll dep, ll &tt)
{
	vis[now]=true;
	ll ret=dep;

	pll t(0, 0);

	for(auto nxt : adj[now])
	{
		if(vis[nxt.first]) continue;
		ll p=dfs(nxt.first, dep+nxt.second, tt);
		ret=max(ret, p);
		if(p>t.first) t.second=t.first, t.first=p;
		else if(p>t.second) t.second=p;
	}
	tt=max(tt, t.first+t.second-dep-dep);
	return ret;
}

int main()
{
	int i, j;

	scanf("%d", &N);
	for(i=1; i<=N; i++)
	{
		int u=i, v, w;
		scanf("%d%d", &v, &w);
		to[u]={v, w};
		adj[v].push_back({u, w});
	}

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

		int now=i;
		vector<int> cyc;
		while(!vis[now])
		{
			cyc.push_back(now);
			vis[now]=1;
			now=to[now].first;
		}

		reverse(cyc.begin(), cyc.end());
		while(!cyc.empty() && cyc.back()!=now) vis[cyc.back()]=0, cyc.pop_back();
		reverse(cyc.begin(), cyc.end());

		vector<ll> A, D;
		ll val=0, s=0;

		D.push_back(0);
		for(auto it : cyc) A.push_back(dfs(it, 0, val));
		for(auto it : cyc) D.push_back(D.back()+to[it].second), s+=to[it].second;
		D.pop_back();

		ll t=-1e18;
		for(j=0; j<cyc.size(); j++)
		{
			if(j) val=max(val, D[j]+A[j]+t);
			t=max(t, A[j]-D[j]);
		}

		t=-1e18;
		for(j=0; j<cyc.size(); j++)
		{
			if(j) val=max(val, s-D[j]+A[j]+t);
			t=max(t, D[j]+A[j]);
		}

		ans+=val;
	}
	printf("%lld", ans);
}

Compilation message

islands.cpp: In function 'int main()':
islands.cpp:75:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j=0; j<cyc.size(); j++)
            ~^~~~~~~~~~~
islands.cpp:82:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j=0; j<cyc.size(); j++)
            ~^~~~~~~~~~~
islands.cpp:40:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
  ~~~~~^~~~~~~~~~
islands.cpp:44:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &v, &w);
   ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 20 ms 23800 KB Output is correct
2 Correct 20 ms 23800 KB Output is correct
3 Correct 20 ms 23800 KB Output is correct
4 Correct 20 ms 23800 KB Output is correct
5 Correct 20 ms 23800 KB Output is correct
6 Correct 20 ms 23800 KB Output is correct
7 Correct 20 ms 23800 KB Output is correct
8 Correct 21 ms 23800 KB Output is correct
9 Correct 19 ms 23800 KB Output is correct
10 Correct 20 ms 23804 KB Output is correct
11 Correct 20 ms 23800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 20 ms 23804 KB Output is correct
2 Correct 21 ms 23800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 23800 KB Output is correct
2 Correct 22 ms 23928 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 24316 KB Output is correct
2 Correct 42 ms 25080 KB Output is correct
3 Correct 31 ms 24440 KB Output is correct
4 Correct 26 ms 24056 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 46 ms 25720 KB Output is correct
2 Correct 58 ms 27444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 98 ms 30096 KB Output is correct
2 Correct 103 ms 35192 KB Output is correct
3 Correct 133 ms 35704 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 170 ms 36652 KB Output is correct
2 Correct 205 ms 42208 KB Output is correct
3 Correct 242 ms 54604 KB Output is correct
4 Correct 288 ms 52412 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 334 ms 40532 KB Output is correct
2 Correct 719 ms 65596 KB Output is correct
3 Correct 323 ms 46848 KB Output is correct
4 Correct 406 ms 60904 KB Output is correct
5 Correct 390 ms 58980 KB Output is correct
6 Correct 890 ms 52728 KB Output is correct
7 Correct 434 ms 70356 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 457 ms 131076 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -