Submission #1035323

#TimeUsernameProblemLanguageResultExecution timeMemory
1035323c2zi6Dreaming (IOI13_dreaming)C++14
47 / 100
46 ms16860 KiB
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define all(a) (a).begin(), (a).end()
#define replr(i, a, b) for (int i = int(a); i <= int(b); ++i)
#define reprl(i, a, b) for (int i = int(a); i >= int(b); --i)
#define rep(i, n) for (int i = 0; i < int(n); ++i)
#define mkp(a, b) make_pair(a, b)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef vector<PII> VPI;
typedef vector<VI> VVI;
typedef vector<VVI> VVVI;
typedef vector<VPI> VVPI;
typedef pair<ll, ll> PLL;
typedef vector<ll> VL;
typedef vector<PLL> VPL;
typedef vector<VL> VVL;
typedef vector<VVL> VVVL;
typedef vector<VPL> VVPL;
template<class T> T setmax(T& a, T b) {if (a < b) return a = b; return a;}
template<class T> T setmin(T& a, T b) {if (a < b) return a; return a = b;}
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template<class T>
using indset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#include "dreaming.h"

int n, m, L;
VVPI gp;
void dfs(int u, int p, VI& dist, VI& comp) {
    comp.pb(u);
    for (auto[v, w] : gp[u]) if (v != p) {
        dist[v] = dist[u] + w;
        dfs(v, u, dist, comp);
    }
}
void dfs(int u, int p, VI& dist) {
    for (auto[v, w] : gp[u]) if (v != p) {
        dist[v] = dist[u] + w;
        dfs(v, u, dist);
    }
}

int amenaheru(VI& comp, VI& dist) {
    int ret;
    int mx = -2e9;
    for (int u : comp) if (dist[u] > mx) {
        ret = u;
        mx = dist[u];
    }
    return ret;
}
int amenamejtex(VI& comp, VI& maxdist) {
    int ret = 2e9;
    for (int u : comp) setmin(ret, maxdist[u]);
    return ret;
}

int travelTime(int N, int M, int L_arg, int A[], int B[], int T[]) {
    n = N;
    m = M;
    L = L_arg;
    gp = VVPI(n);
    rep(i, m) {
        int u = A[i];
        int v = B[i];
        int w = T[i];
        gp[u].pb({v, w});
        gp[v].pb({u, w});
    }
    VI dist(n, 2e9);
    VI distd1(n);
    VI distd2(n);
    VI maxdist(n);

    int answer = 0;

    VVI comp;
    rep(u, n) if (dist[u] == 2e9) {
        dist[u] = 0;
        comp.pb(VI());
        dfs(u, -1, dist, comp.back());
        int d1 = amenaheru(comp.back(), dist);
        dfs(d1, -1, distd1);
        int d2 = amenaheru(comp.back(), distd1);
        dfs(d2, -1, distd2);
        for (int u : comp.back()) maxdist[u] = max(distd1[u], distd2[u]);
        int diameter = distd1[d2];
        setmax(answer, diameter);
        /*cout << "COMPONENT: ";*/
        /*for (int u : comp.back()) cout << u << " "; cout << endl;*/
        /*cout << "DIAMETER: " << d1 << " " << d2 << " " << distd1[d2] << endl;*/
        /*cout << "FARTHEST PATH LENGTH FROM " << endl;*/
        /*for (int u : comp.back()) {*/
        /*    cout << u << ": " << maxdist[u] << endl;*/
        /*}*/
        /*cout << endl;*/
    }

    int ans = 0;
    for (VI& c : comp) {
        ans += amenamejtex(c, maxdist);
    }
    setmax(answer, ans + L);

    return answer;
}

Compilation message (stderr)

dreaming.cpp: In function 'void dfs(int, int, VI&, VI&)':
dreaming.cpp:38:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   38 |     for (auto[v, w] : gp[u]) if (v != p) {
      |              ^
dreaming.cpp: In function 'void dfs(int, int, VI&)':
dreaming.cpp:44:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   44 |     for (auto[v, w] : gp[u]) if (v != p) {
      |              ^
dreaming.cpp: In function 'int amenaheru(VI&, VI&)':
dreaming.cpp:57:12: warning: 'ret' may be used uninitialized in this function [-Wmaybe-uninitialized]
   57 |     return ret;
      |            ^~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:94:33: warning: 'ret' may be used uninitialized in this function [-Wmaybe-uninitialized]
   94 |         int diameter = distd1[d2];
      |                                 ^
dreaming.cpp:90:12: warning: 'ret' may be used uninitialized in this function [-Wmaybe-uninitialized]
   90 |         dfs(d1, -1, distd1);
      |         ~~~^~~~~~~~~~~~~~~~
#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...