Submission #1288974

#TimeUsernameProblemLanguageResultExecution timeMemory
1288974muhammad-ahmadDreaming (IOI13_dreaming)C++20
47 / 100
37 ms9500 KiB
#include <bits/stdc++.h>
#include "dreaming.h"
using namespace std;

const int N = 1e5 + 5;
int vis[N], dist[N], par[N], MMM;
vector<pair<int, int>> adj[N];

int D(int u){
	dist[u] = 0;
	vector<int> C;
	queue<int> q;
	q.push(u);
	C.push_back(u);
	while (q.size()){
		int v = q.front(); q.pop();
		for (auto [i, w] : adj[v]){
			if (dist[i] > dist[v] + w){
				dist[i] = dist[v] + w;
				q.push(i);
				C.push_back(i);
			}
		}
	}
	
	int ma = N - 1;
	for (auto v : C){
		if (dist[v] > dist[ma]) ma = v;
		vis[v] = 1;
	}
	
	for (auto v : C){
		dist[v] = 1e9;
	}
	dist[ma] = 0;
	par[ma] = -1;
	q.push(ma);
	while (q.size()){
		int v = q.front(); q.pop();
		for (auto [i, w] : adj[v]){
			if (dist[i] > dist[v] + w){
				dist[i] = dist[v] + w;
				par[i] = v;
				q.push(i);
			}
		}
	}
	
	int ans = 1e9, M = N - 1;
	for (auto i : C){
		if (dist[i] > dist[M]) M = i;
		MMM = max(MMM, dist[i]);
	}
	
	int MM = M;
	
	// cout << ma << ' ' << MM  << endl;
	
	while (M != -1){
		ans = min(ans, max(dist[M], dist[MM] - dist[M]));
		M = par[M];
	}
	return ans;
	
}

int travelTime(int n, int m, int l, int A[], int B[], int T[]) {
	for (int i = 0; i < N; i++) dist[i] = 1e9;
	dist[N - 1] = -15;
	for (int i = 0; i < m; i++){
		int u = A[i], v = B[i], w = T[i];
		adj[u].push_back({v, w});
		adj[v].push_back({u, w});
	}
	
	vector<int> dim;
	
	for (int i = 0; i < n; i++){
		if (vis[i]) continue;
		dim.push_back(D(i));
	}
	
	sort(dim.rbegin(), dim.rend());
	if (dim.size() == 1){
		return MMM;
	}
	else {
		return max(MMM, dim[0] + dim[1] + l);
	}
	
	return 0;
}

// int main(){
	// int a[] = {0, 8, 2, 5, 5, 1, 1, 10};
	// int b[] = {8, 2, 7, 11, 1, 3, 9, 6};
	// int t[] = {4, 2, 4, 3, 7, 1, 5, 3};
	// cout << travelTime(12, 8, 2, a, b, t);
// }
#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...