Submission #900545

# Submission time Handle Problem Language Result Execution time Memory
900545 2024-01-08T13:47:12 Z gun_gan Dreaming (IOI13_dreaming) C++17
18 / 100
32 ms 13776 KB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MX = 1e5 + 5;
int N, M, L;
vector<pair<int,int>> g[MX];

bool vis[MX];
int cur = 0, mx = 0, z = 0, len = 0;
vector<int> vec;
int p = 0, q = 0;
pair<int,int> par[MX];

void dfs(int v) {
      vis[v] = 1;
      vec.push_back(v);
      if(cur > mx) {
            mx = cur;
            z = v;
      }
      for(auto [u, w] : g[v]) {
            if(!vis[u]) {
                  if(cur + w > len / 2 && !p && len > 0) {
                        p = cur;
                        q = len - cur;
                  }
                  cur += w;
                  par[u] = {v, w};
                  dfs(u);
                  cur -= w;
            }
      }
}

vector<pair<int,int>> P;

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
      for(int i = 0; i < M; i++) {
            g[A[i]].push_back({B[i], T[i]});
            g[B[i]].push_back({A[i], T[i]});
      }

      for(int i = 1; i <= N; i++) {
            if(vis[i]) continue;
            vec.clear();
            cur = 0, mx = 0, z = 0, len = 0, p = 0, q = 0;

            dfs(i);
            for(auto x : vec) {
                  vis[x] = 0;
                  par[x] = {z, 0};
            }

            if(vec.size() == 1) {
                  for(auto x : vec) {
                        vis[x] = 1;
                  }
                  P.push_back({0, 0});
                  continue;
            }

            if(vec.size() == 2) {
                  for(auto x : vec) {
                        vis[x] = 1;
                  }
                  P.push_back({mx, 0});
                  continue;
            }

            vec.clear();
            int tz = z;
            cur = 0, mx = 0, z = 0;
            dfs(tz);

            len = mx;

            int k = z, sum = 0;
            while(k != tz) {
                  if(sum + par[k].second > len / 2 && sum <= len / 2) {
                        p = sum;
                        q = len - sum;
                  }
                  sum += par[k].second;
                  k = par[k].first;
            }

            vec.clear();

            P.push_back({max(p, q), min(p, q)});
      }

      sort(P.rbegin(), P.rend());

      int ans = 0;

      for(auto [x, y] : P) {
            ans = max(ans, x + y);
      }

      for(int i = 1; i < P.size(); i++) {
            auto [x, y] = P[i];
            ans = max(ans, P[0].first + L + x);
      }

      if(P.size() > 2) {
            ans = max(ans, P[1].first + 2 * L + P[2].first);
      }

      return ans;
}

Compilation message

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:102:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |       for(int i = 1; i < P.size(); i++) {
      |                      ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 32 ms 13776 KB Output is correct
2 Correct 30 ms 13776 KB Output is correct
3 Correct 20 ms 10716 KB Output is correct
4 Correct 5 ms 5976 KB Output is correct
5 Correct 5 ms 5208 KB Output is correct
6 Correct 8 ms 6748 KB Output is correct
7 Incorrect 1 ms 4440 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 2 ms 4444 KB Output is correct
3 Incorrect 1 ms 4444 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 32 ms 13776 KB Output is correct
2 Correct 30 ms 13776 KB Output is correct
3 Correct 20 ms 10716 KB Output is correct
4 Correct 5 ms 5976 KB Output is correct
5 Correct 5 ms 5208 KB Output is correct
6 Correct 8 ms 6748 KB Output is correct
7 Incorrect 1 ms 4440 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 18 ms 7548 KB Output is correct
2 Correct 13 ms 7388 KB Output is correct
3 Correct 15 ms 7400 KB Output is correct
4 Correct 14 ms 7388 KB Output is correct
5 Correct 15 ms 7388 KB Output is correct
6 Correct 15 ms 7900 KB Output is correct
7 Correct 14 ms 7388 KB Output is correct
8 Correct 13 ms 7136 KB Output is correct
9 Correct 16 ms 7128 KB Output is correct
10 Correct 15 ms 7380 KB Output is correct
11 Correct 1 ms 4444 KB Output is correct
12 Correct 4 ms 5844 KB Output is correct
13 Correct 4 ms 5844 KB Output is correct
14 Correct 4 ms 5844 KB Output is correct
15 Correct 4 ms 5844 KB Output is correct
16 Correct 4 ms 5844 KB Output is correct
17 Correct 4 ms 5844 KB Output is correct
18 Correct 6 ms 5844 KB Output is correct
19 Correct 4 ms 5840 KB Output is correct
20 Correct 1 ms 4444 KB Output is correct
21 Correct 1 ms 4444 KB Output is correct
22 Correct 2 ms 4700 KB Output is correct
23 Correct 5 ms 5844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 2 ms 4444 KB Output is correct
3 Incorrect 1 ms 4444 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 32 ms 13776 KB Output is correct
2 Correct 30 ms 13776 KB Output is correct
3 Correct 20 ms 10716 KB Output is correct
4 Correct 5 ms 5976 KB Output is correct
5 Correct 5 ms 5208 KB Output is correct
6 Correct 8 ms 6748 KB Output is correct
7 Incorrect 1 ms 4440 KB Output isn't correct
8 Halted 0 ms 0 KB -