Submission #1146218

#TimeUsernameProblemLanguageResultExecution timeMemory
1146218zhasynDreaming (IOI13_dreaming)C++20
18 / 100
1093 ms10932 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;

vector <pii> q[N];
int mx, cur[N], p[N], sz[N], ans;
void dfs(int v, int pred, int sum){
	mx = max(mx, sum);
	for(auto u : q[v]){
		if(u.F == pred) continue;
		dfs(u.F, v, sum + u.S);
	}
}
int gt(int x){
	if(p[x] == x) return x;
	return p[x] = gt(p[x]);
}
void addthem(int a, int b){
	a = gt(a);
	b = gt(b);
	if(a != b){
		if(sz[b] > sz[a]) swap(a, b);
		sz[a] += sz[b];
		p[b] = a;
		cur[a] = min(cur[a], cur[b]);
	}
}
int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    for(int i = 0; i < m; i++){
    	q[a[i]].pb({b[i], t[i]});
    	q[b[i]].pb({a[i], t[i]});
    }
    for(int i = 1; i <= n; i++){
    	mx = 0;
    	dfs(i, -1, 0);
    	cur[i] = mx;
    	sz[i] = 1;
    	p[i] = i;
    	
    	ans = max(ans, mx);
    }
    for(int i = 1; i <= n; i++){
    	for(auto u : q[i]){
    		addthem(u.F, i);
    	}
    }
    vector <int> vec;
    for(int i = 1; i <= n; i++){
    	if(p[i] == i) vec.pb(cur[i]);
    }
    sort(vec.begin(), vec.end());
    int ss = (int)vec.size();
    if((int)vec.size() >= 2) ans = max(ans, vec[ss - 1] + vec[ss - 2] + l);
	if((int)vec.size() >= 3) ans = max(ans, vec[ss - 3] + vec[ss - 2] + 2 * l);
    return ans;
}
// int main() {
  // ios::sync_with_stdio(false);
  // cin.tie(NULL);
  
  // return 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...