# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
551369 | razvan | Dreaming (IOI13_dreaming) | C++14 | 50 ms | 12364 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dreaming.h"
#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <algorithm>
#define pb push_back
using namespace std;
const int maxn = 100005;
struct xy {
int x, y;
};
vector<xy> v[maxn];
int done[maxn];
int bgst[maxn], ibgst[maxn];
//int ibgst2[maxn];
int now = -1, inow;
//int lft, rgh;
int ansnow, iansnow;
void dfs(int x, int p) {
done[x] = true;
int big1 = 0, big2 = 0, ibig1 = -1, ibig2 = -1;
for(auto u : v[x]) {
if(u.x != p) {
dfs(u.x, x);
if(bgst[u.x] + u.y > big1) {
big2 = big1;
ibig2 = ibig1;
big1 = bgst[u.x] + u.y;
ibig1 = u.x;
} else if(bgst[u.x] + u.y > big2) {
big2 = bgst[u.x] + u.y;
ibig2 = u.x;
}
}
}
bgst[x] = big1;
ibgst[x] = ibig1;
//ibgst2[x] = ibig2;
if(big1 + big2 > now) {
now = big1 + big2;
inow = x;
}
}
void dfs2(int x) {
if(max(bgst[x], now - bgst[x]) < ansnow) {
ansnow = max(bgst[x], now - bgst[x]);
iansnow = x;
}
if(ibgst[x] != -1)
dfs2(ibgst[x]);
}
vector<int> points;
int best = -1, ibest;
int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
int i, j;
for(i = 0; i < m; i ++) {
v[a[i]].pb({b[i], t[i]});
v[b[i]].pb({a[i], t[i]});
}
for(i = 0; i < n; i ++) {
if(done[i] == false) {
done[i] = true;
now = -1;
dfs(i, -1);
//lft = bgst[inow];
//rgh = now - lft;
ansnow = bgst[inow];
iansnow = i;
//cout << "now: " << now << ' ' << inow << " " << ansnow << ' ' << iansnow << '\n';
dfs2(ibgst[inow]);
//cout << "ansnow: " << ansnow << ' ' << iansnow << '\n';
points.pb(iansnow);
if(ansnow > best) {
best = ansnow;
ibest = iansnow;
}
}
}
//cout << "best, ibest: " << best << ' ' << ibest << '\n';
for(auto w : points) {
//cout << "point " << w << '\n';
if(w != ibest) {
v[ibest].pb({w, l});
v[w].pb({ibest, l});
}
}
for(i = 0; i < n; i ++) {
bgst[i] = ibgst[i] = 0;
//ibgst2[i] = 0;
}
now = -1;
dfs(0, -1);
return now;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |