Submission #305941

#TimeUsernameProblemLanguageResultExecution timeMemory
305941sofapudenDreaming (IOI13_dreaming)C++14
100 / 100
132 ms16760 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
 
using namespace std;
vector<vector<pair<int,int>>> gri;
vector<pair<int,int>> b1, b2;
vector<int> dis, used;
int jic = 0, mmm;

void dfs1(int x, int p){
	used[x] = 1;
	for(int i = 0; i < (int)gri[x].size(); ++i){
		if(gri[x][i].first == p)continue;
		dfs1(gri[x][i].first,x);
		b2[x] = max(b2[x], {b1[gri[x][i].first].first+gri[x][i].second,gri[x][i].first});
		if(b1[x] < b2[x])swap(b1[x],b2[x]);
	}
}

void dfs2(int x, int p, int d){
	used[x] = 1;
	int y = max(b1[x].first,d);
	mmm = min(mmm,y);
	jic = max(jic,y);
	for(int i = 0; i < gri[x].size(); ++i){
		if(gri[x][i].first == p)continue;
		if(gri[x][i].first == b1[x].second)dfs2(gri[x][i].first,x,max(b2[x].first,d)+gri[x][i].second);
		else dfs2(gri[x][i].first,x,y+gri[x][i].second);
	}
}
 
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
	if(N == 1)return 0;
	if(N == 2)return (M ? T[0] : L);
	used.resize(N,0);
	b1.resize(N);
	b2.resize(N);
	gri.resize(N);
	for(int i = 0; i < M; ++i){
		gri[A[i]].push_back({B[i],T[i]});
		gri[B[i]].push_back({A[i],T[i]});
	}
	for(int i = 0; i < N; ++i){
		if(!used[i] && (int)gri[i].size() <= 1){
			dfs1(i,i);
		}
	}
	used.clear();
	used.resize(N,0);
	for(int i = 0; i < N; ++i){
		if(!used[i] && (int)gri[i].size() <= 1){
			mmm = INT_MAX;
			dfs2(i,i,0);
			dis.push_back(mmm);
		}
	}
	sort(dis.rbegin(), dis.rend());
	if(dis.size() >= 3){
		return max(jic,max(dis[0]+L+dis[1],dis[1]+dis[2]+2*L));
	}
	if(dis.size() == 2){
		return max(jic,dis[0]+L+dis[1]);
	}
	return jic;
}

Compilation message (stderr)

dreaming.cpp: In function 'void dfs2(int, int, int)':
dreaming.cpp:25:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |  for(int i = 0; i < gri[x].size(); ++i){
      |                 ~~^~~~~~~~~~~~~~~
#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...