Submission #943185

#TimeUsernameProblemLanguageResultExecution timeMemory
943185PenguinsAreCuteDreaming (IOI13_dreaming)C++17
100 / 100
52 ms16072 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
#define fi first
#define se second
#define pb push_back
#define REP(i,a,b) for(int i=a;i<b;i++)
int dist[121010], par[121010]; // 42 days to go, 42 lines of code.
vector<int> cc;
vector<ii> adj[121010];
void dfs(int x, int p, bool ins) {
	par[x]=p; if(ins) cc.pb(x);
	for(auto i: adj[x]) if(i.fi!=p) {dist[i.fi]=dist[x]+i.se; dfs(i.fi,x,ins);}
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
	vector<int> cenTimes; int maxD=0;
	REP(i,0,M) {
		adj[A[i]].pb(ii(B[i],T[i]));
		adj[B[i]].pb(ii(A[i],T[i]));
	}
	REP(i,0,N) if(dist[i]==0) {
		cc.clear();
		dfs(i,-1,1);
		ii far=ii(0,0);
		for(auto j: cc) far=max(far,ii(dist[j],j));
		int pt1=far.se;
		dist[pt1]=0;
		dfs(pt1,-1,0);
		far=ii(0,0);
		for(auto j: cc) far=max(far,ii(dist[j],j));
		maxD=max(maxD,far.fi);
		int cnt=0;
		while(far.se!=pt1&&dist[far.se]+dist[par[far.se]]>far.fi) far.se=par[far.se];
		cenTimes.pb(max(dist[far.se],far.fi-dist[far.se]));
		dist[pt1]=420;
	}
	sort(cenTimes.begin(),cenTimes.end(),greater<int>());
	if(cenTimes.size()>=2) maxD=max(maxD,cenTimes[0]+cenTimes[1]+L);
	if(cenTimes.size()>=3) maxD=max(maxD,cenTimes[1]+cenTimes[2]+2*L);
	return maxD;
}

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:33:7: warning: unused variable 'cnt' [-Wunused-variable]
   33 |   int cnt=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...