답안 #1060728

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1060728 2024-08-15T21:23:52 Z MilosMilutinovic The Ties That Guide Us (CEOI23_incursion) C++17
60 / 100
281 ms 16216 KB
#include "incursion.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> mark(vector<pair<int, int>> e, int safe) {
  --safe;
  int n = (int) e.size() + 1;
  vector<vector<int>> g(n);
  for (int i = 0; i + 1 < n; i++) {
    --e[i].first; --e[i].second;
    g[e[i].first].push_back(e[i].second);
    g[e[i].second].push_back(e[i].first);
  }
  int root;
  {
    vector<int> sz(n);
    function<void(int, int)> Dfs = [&](int v, int pv) {
      sz[v] = 1;
      for (int u : g[v]) {
        if (u == pv) {
          continue;
        }
        Dfs(u, v);
        sz[v] += sz[u];
      }
    };
    Dfs(0, 0);
    vector<int> cen;
    function<int(int, int)> FindCentroid = [&](int v, int pv) {
      if (sz[v] * 2 == n) {
        cen.push_back(pv);
      }
      for (int u : g[v]) {
        if (u == pv || sz[u] * 2 < n) {
          continue;
        }
        return FindCentroid(u, v);
      }
      cen.push_back(v);
      return v;
    };
    root = FindCentroid(0, 0);
    if ((int) cen.size() == 2) {
      vector<int> que(1, safe);
      vector<bool> was(n);
      was[safe] = true;
      for (int b = 0; b < (int) que.size(); b++) {
        int i = que[b];
        if (i == cen[0] || i == cen[1]) {
          root = i;
          break;
        }
        for (int j : g[i]) {
          if (!was[j]) {
            que.push_back(j);
            was[j] = true;
          }
        }
      }
    }
  }
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    if ((int) g[i].size() == 2) {
      cnt += 1;
    }
  }
  if (cnt == 1) {
    for (int i = 0; i < n; i++) {
      if ((int) g[i].size() == 2) {
        root = i;
      }
    }
  }
  vector<int> dfn(n);
  vector<int> dfo(n);
  int T = -1;
  function<void(int, int)> Dfs = [&](int v, int pv) {
    dfn[v] = ++T;
    for (int u : g[v]) {
      if (u == pv) {
        continue;
      }
      Dfs(u, v);
    }
    dfo[v] = T;
  };
  Dfs(root, root);
  vector<int> seq(n);
  for (int i = 0; i < n; i++) {
    if (dfn[i] <= dfn[safe] && dfo[safe] <= dfo[i]) {
      seq[i] = 1;
    } else {
      seq[i] = 0;
    }
  }
  return seq;
}

void locate(vector<pair<int, int>> e, int curr, int t) {
  --curr;
  int n = (int) e.size() + 1;
  vector<vector<int>> g(n);
  for (int i = 0; i + 1 < n; i++) {
    --e[i].first; --e[i].second;
    g[e[i].first].push_back(e[i].second);
    g[e[i].second].push_back(e[i].first);
  }
  vector<int> cen;
  {
    vector<int> sz(n);
    function<void(int, int)> Dfs = [&](int v, int pv) {
      sz[v] = 1;
      for (int u : g[v]) {
        if (u == pv) {
          continue;
        }
        Dfs(u, v);
        sz[v] += sz[u];
      }
    };
    Dfs(0, 0);
    function<void(int, int)> Find = [&](int v, int pv) {
      if (sz[v] * 2 == n) {
        cen.push_back(pv);
      }
      for (int u : g[v]) {
        if (u == pv || sz[u] * 2 < n) {
          continue;
        }
        Find(u, v);
        return;
      }
      cen.push_back(v);
    };
    Find(0, 0);
  }
  int root = cen[0];
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    if ((int) g[i].size() == 2) {
      cnt += 1;
    }
  }
  if (cnt == 1) {
    for (int i = 0; i < n; i++) {
      if ((int) g[i].size() == 2) {
        root = i;
      }
    }
  }
  vector<int> x(n, -1);
  vector<int> pr(n);
  vector<int> sz(n);
  function<void(int, int)> Dfs = [&](int v, int pv) {
    pr[v] = pv;
    sz[v] = 1;
    for (int u : g[v]) {
      if (u == pv) {
        continue;
      }
      Dfs(u, v);
      sz[v] += sz[u];
      if (x[v] == -1 || sz[x[v]] < sz[u]) {
        x[v] = u;
      }
    }
  };
  Dfs(root, root);
  while (true) {
    if (curr == root && t == 0) {
      root = cen[1];
      x = vector<int>(n, -1);
      Dfs(root, root);
      t = visit(root + 1);
      curr = root;
      continue;
    }
    if (t == 0) {
      t = visit(pr[curr] + 1);
      curr = pr[curr];
      continue;
    }
    if (x[curr] == -1) {
      return;
    }
    int k = visit(x[curr] + 1);
    if (k == 1) {
      curr = x[curr];
      t = k;
      continue;
    }
    visit(curr + 1);
    bool found = false;
    for (int u : g[curr]) {
      if (u == pr[curr] || u == x[curr]) {
        continue;
      }
      int k = visit(u + 1);
      if (k == 1) {
        t = k;
        curr = u;
        found = true;
        break;
      }
      visit(curr + 1);
    }
    if (!found) {
      return;
    }
  }
}

Compilation message

interface.cpp: In function 'int main()':
interface.cpp:44:55: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |     if(fread(T.data(), sizeof(int), 2 * N - 2, stdin) != 2 * N - 2) exit(0);
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
interface.cpp:50:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   50 |         int l = (numbers.size() == N ? N : 0);
      |                  ~~~~~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1028 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 249 ms 13316 KB Correct
2 Correct 200 ms 13744 KB Correct
3 Correct 117 ms 14592 KB Correct
4 Correct 110 ms 15396 KB Correct
5 Correct 203 ms 15148 KB Correct
6 Correct 89 ms 15436 KB Correct
7 Correct 84 ms 13548 KB Correct
8 Correct 234 ms 14064 KB Correct
9 Correct 217 ms 14908 KB Correct
10 Correct 150 ms 13808 KB Correct
11 Correct 97 ms 15844 KB Correct
12 Correct 255 ms 13820 KB Correct
13 Correct 78 ms 13308 KB Correct
14 Correct 92 ms 13804 KB Correct
15 Correct 203 ms 14788 KB Correct
16 Correct 218 ms 16152 KB Correct
17 Correct 135 ms 12540 KB Correct
18 Correct 91 ms 13548 KB Correct
19 Correct 161 ms 12824 KB Correct
20 Correct 91 ms 15168 KB Correct
21 Correct 88 ms 13888 KB Correct
22 Correct 219 ms 13956 KB Correct
23 Correct 213 ms 14072 KB Correct
24 Correct 109 ms 13636 KB Correct
25 Correct 95 ms 14772 KB Correct
26 Correct 90 ms 13316 KB Correct
27 Correct 88 ms 13888 KB Correct
28 Correct 84 ms 14576 KB Correct
29 Correct 206 ms 14444 KB Correct
30 Correct 213 ms 12988 KB Correct
31 Correct 100 ms 15608 KB Correct
32 Correct 281 ms 14316 KB Correct
33 Correct 240 ms 14804 KB Correct
34 Correct 84 ms 13304 KB Correct
35 Correct 84 ms 12872 KB Correct
36 Correct 224 ms 14004 KB Correct
37 Correct 222 ms 14404 KB Correct
38 Correct 254 ms 15292 KB Correct
39 Correct 161 ms 15568 KB Correct
40 Correct 196 ms 15264 KB Correct
41 Correct 99 ms 14816 KB Correct
42 Correct 101 ms 14636 KB Correct
43 Correct 187 ms 14520 KB Correct
44 Correct 191 ms 12772 KB Correct
45 Correct 95 ms 13228 KB Correct
46 Correct 91 ms 13632 KB Correct
47 Correct 98 ms 14420 KB Correct
48 Correct 94 ms 12964 KB Correct
49 Correct 99 ms 15024 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 8280 KB Correct
2 Correct 84 ms 8112 KB Correct
3 Correct 86 ms 7844 KB Correct
4 Correct 101 ms 12348 KB Correct
5 Correct 137 ms 12192 KB Correct
6 Correct 165 ms 12284 KB Correct
7 Correct 96 ms 7916 KB Correct
8 Correct 99 ms 7848 KB Correct
9 Correct 84 ms 7848 KB Correct
10 Correct 80 ms 7748 KB Correct
11 Correct 82 ms 7916 KB Correct
12 Correct 82 ms 7836 KB Correct
13 Correct 75 ms 7932 KB Correct
14 Correct 65 ms 6112 KB Correct
15 Correct 56 ms 6116 KB Correct
16 Correct 76 ms 8032 KB Correct
17 Correct 79 ms 7944 KB Correct
18 Correct 78 ms 7884 KB Correct
19 Correct 83 ms 7932 KB Correct
20 Correct 63 ms 5980 KB Correct
21 Correct 69 ms 6380 KB Correct
22 Correct 52 ms 5972 KB Correct
23 Correct 63 ms 5884 KB Correct
24 Correct 64 ms 5960 KB Correct
25 Correct 55 ms 6236 KB Correct
26 Correct 87 ms 7908 KB Correct
27 Correct 79 ms 7828 KB Correct
28 Correct 88 ms 7832 KB Correct
29 Correct 89 ms 7860 KB Correct
30 Correct 86 ms 8116 KB Correct
31 Correct 75 ms 7932 KB Correct
32 Correct 82 ms 7916 KB Correct
33 Correct 80 ms 7936 KB Correct
34 Correct 80 ms 8144 KB Correct
35 Correct 83 ms 7920 KB Correct
36 Correct 82 ms 8008 KB Correct
37 Correct 86 ms 7924 KB Correct
38 Correct 89 ms 7920 KB Correct
39 Correct 81 ms 8164 KB Correct
40 Correct 72 ms 7996 KB Correct
41 Correct 81 ms 8044 KB Correct
42 Correct 83 ms 7932 KB Correct
43 Correct 82 ms 8356 KB Correct
44 Correct 82 ms 8004 KB Correct
45 Correct 82 ms 7928 KB Correct
46 Correct 91 ms 8088 KB Correct
47 Correct 84 ms 7868 KB Correct
48 Correct 74 ms 7848 KB Correct
49 Correct 80 ms 7932 KB Correct
50 Correct 89 ms 8052 KB Correct
51 Correct 78 ms 7996 KB Correct
52 Correct 88 ms 7996 KB Correct
53 Correct 76 ms 7996 KB Correct
54 Correct 77 ms 8128 KB Correct
55 Correct 82 ms 8092 KB Correct
56 Correct 82 ms 8444 KB Correct
57 Correct 77 ms 8452 KB Correct
58 Correct 83 ms 8356 KB Correct
59 Correct 75 ms 8512 KB Correct
60 Correct 78 ms 8188 KB Correct
61 Correct 78 ms 8448 KB Correct
62 Correct 82 ms 8512 KB Correct
63 Correct 81 ms 8440 KB Correct
64 Correct 82 ms 8192 KB Correct
65 Correct 82 ms 8264 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1028 KB Correct
2 Correct 249 ms 13316 KB Correct
3 Correct 200 ms 13744 KB Correct
4 Correct 117 ms 14592 KB Correct
5 Correct 110 ms 15396 KB Correct
6 Correct 203 ms 15148 KB Correct
7 Correct 89 ms 15436 KB Correct
8 Correct 84 ms 13548 KB Correct
9 Correct 234 ms 14064 KB Correct
10 Correct 217 ms 14908 KB Correct
11 Correct 150 ms 13808 KB Correct
12 Correct 97 ms 15844 KB Correct
13 Correct 255 ms 13820 KB Correct
14 Correct 78 ms 13308 KB Correct
15 Correct 92 ms 13804 KB Correct
16 Correct 203 ms 14788 KB Correct
17 Correct 218 ms 16152 KB Correct
18 Correct 135 ms 12540 KB Correct
19 Correct 91 ms 13548 KB Correct
20 Correct 161 ms 12824 KB Correct
21 Correct 91 ms 15168 KB Correct
22 Correct 88 ms 13888 KB Correct
23 Correct 219 ms 13956 KB Correct
24 Correct 213 ms 14072 KB Correct
25 Correct 109 ms 13636 KB Correct
26 Correct 95 ms 14772 KB Correct
27 Correct 90 ms 13316 KB Correct
28 Correct 88 ms 13888 KB Correct
29 Correct 84 ms 14576 KB Correct
30 Correct 206 ms 14444 KB Correct
31 Correct 213 ms 12988 KB Correct
32 Correct 100 ms 15608 KB Correct
33 Correct 281 ms 14316 KB Correct
34 Correct 240 ms 14804 KB Correct
35 Correct 84 ms 13304 KB Correct
36 Correct 84 ms 12872 KB Correct
37 Correct 224 ms 14004 KB Correct
38 Correct 222 ms 14404 KB Correct
39 Correct 254 ms 15292 KB Correct
40 Correct 161 ms 15568 KB Correct
41 Correct 196 ms 15264 KB Correct
42 Correct 99 ms 14816 KB Correct
43 Correct 101 ms 14636 KB Correct
44 Correct 187 ms 14520 KB Correct
45 Correct 191 ms 12772 KB Correct
46 Correct 95 ms 13228 KB Correct
47 Correct 91 ms 13632 KB Correct
48 Correct 98 ms 14420 KB Correct
49 Correct 94 ms 12964 KB Correct
50 Correct 99 ms 15024 KB Correct
51 Correct 87 ms 8280 KB Correct
52 Correct 84 ms 8112 KB Correct
53 Correct 86 ms 7844 KB Correct
54 Correct 101 ms 12348 KB Correct
55 Correct 137 ms 12192 KB Correct
56 Correct 165 ms 12284 KB Correct
57 Correct 96 ms 7916 KB Correct
58 Correct 99 ms 7848 KB Correct
59 Correct 84 ms 7848 KB Correct
60 Correct 80 ms 7748 KB Correct
61 Correct 82 ms 7916 KB Correct
62 Correct 82 ms 7836 KB Correct
63 Correct 75 ms 7932 KB Correct
64 Correct 65 ms 6112 KB Correct
65 Correct 56 ms 6116 KB Correct
66 Correct 76 ms 8032 KB Correct
67 Correct 79 ms 7944 KB Correct
68 Correct 78 ms 7884 KB Correct
69 Correct 83 ms 7932 KB Correct
70 Correct 63 ms 5980 KB Correct
71 Correct 69 ms 6380 KB Correct
72 Correct 52 ms 5972 KB Correct
73 Correct 63 ms 5884 KB Correct
74 Correct 64 ms 5960 KB Correct
75 Correct 55 ms 6236 KB Correct
76 Correct 87 ms 7908 KB Correct
77 Correct 79 ms 7828 KB Correct
78 Correct 88 ms 7832 KB Correct
79 Correct 89 ms 7860 KB Correct
80 Correct 86 ms 8116 KB Correct
81 Correct 75 ms 7932 KB Correct
82 Correct 82 ms 7916 KB Correct
83 Correct 80 ms 7936 KB Correct
84 Correct 80 ms 8144 KB Correct
85 Correct 83 ms 7920 KB Correct
86 Correct 82 ms 8008 KB Correct
87 Correct 86 ms 7924 KB Correct
88 Correct 89 ms 7920 KB Correct
89 Correct 81 ms 8164 KB Correct
90 Correct 72 ms 7996 KB Correct
91 Correct 81 ms 8044 KB Correct
92 Correct 83 ms 7932 KB Correct
93 Correct 82 ms 8356 KB Correct
94 Correct 82 ms 8004 KB Correct
95 Correct 82 ms 7928 KB Correct
96 Correct 91 ms 8088 KB Correct
97 Correct 84 ms 7868 KB Correct
98 Correct 74 ms 7848 KB Correct
99 Correct 80 ms 7932 KB Correct
100 Correct 89 ms 8052 KB Correct
101 Correct 78 ms 7996 KB Correct
102 Correct 88 ms 7996 KB Correct
103 Correct 76 ms 7996 KB Correct
104 Correct 77 ms 8128 KB Correct
105 Correct 82 ms 8092 KB Correct
106 Correct 82 ms 8444 KB Correct
107 Correct 77 ms 8452 KB Correct
108 Correct 83 ms 8356 KB Correct
109 Correct 75 ms 8512 KB Correct
110 Correct 78 ms 8188 KB Correct
111 Correct 78 ms 8448 KB Correct
112 Correct 82 ms 8512 KB Correct
113 Correct 81 ms 8440 KB Correct
114 Correct 82 ms 8192 KB Correct
115 Correct 82 ms 8264 KB Correct
116 Correct 78 ms 8084 KB Correct
117 Correct 82 ms 8188 KB Correct
118 Correct 75 ms 8184 KB Correct
119 Correct 86 ms 8252 KB Correct
120 Correct 90 ms 7928 KB Correct
121 Correct 81 ms 8000 KB Correct
122 Correct 82 ms 8000 KB Correct
123 Correct 98 ms 12268 KB Correct
124 Correct 136 ms 12212 KB Correct
125 Correct 151 ms 12280 KB Correct
126 Correct 73 ms 7920 KB Correct
127 Correct 83 ms 8004 KB Correct
128 Correct 79 ms 7944 KB Correct
129 Correct 62 ms 7944 KB Correct
130 Correct 80 ms 8012 KB Correct
131 Correct 79 ms 7944 KB Correct
132 Correct 86 ms 7932 KB Correct
133 Correct 56 ms 6052 KB Correct
134 Correct 47 ms 6128 KB Correct
135 Correct 81 ms 8004 KB Correct
136 Correct 66 ms 8008 KB Correct
137 Correct 76 ms 8008 KB Correct
138 Correct 69 ms 7848 KB Correct
139 Correct 57 ms 6136 KB Correct
140 Correct 59 ms 6300 KB Correct
141 Correct 63 ms 6124 KB Correct
142 Correct 56 ms 6240 KB Correct
143 Correct 54 ms 6040 KB Correct
144 Correct 54 ms 6036 KB Correct
145 Correct 84 ms 7928 KB Correct
146 Correct 83 ms 7940 KB Correct
147 Correct 87 ms 8080 KB Correct
148 Correct 78 ms 7860 KB Correct
149 Correct 82 ms 7996 KB Correct
150 Correct 73 ms 7924 KB Correct
151 Correct 87 ms 8000 KB Correct
152 Correct 77 ms 8044 KB Correct
153 Correct 72 ms 7936 KB Correct
154 Correct 77 ms 8204 KB Correct
155 Correct 91 ms 8268 KB Correct
156 Correct 80 ms 7924 KB Correct
157 Correct 78 ms 7872 KB Correct
158 Correct 84 ms 7876 KB Correct
159 Correct 88 ms 8076 KB Correct
160 Correct 83 ms 7848 KB Correct
161 Correct 88 ms 7852 KB Correct
162 Correct 82 ms 8084 KB Correct
163 Correct 83 ms 8000 KB Correct
164 Correct 81 ms 7996 KB Correct
165 Correct 75 ms 7936 KB Correct
166 Correct 78 ms 7920 KB Correct
167 Correct 72 ms 8000 KB Correct
168 Correct 81 ms 8104 KB Correct
169 Correct 82 ms 7912 KB Correct
170 Correct 87 ms 7928 KB Correct
171 Correct 78 ms 7940 KB Correct
172 Correct 76 ms 7996 KB Correct
173 Correct 76 ms 7940 KB Correct
174 Correct 81 ms 7928 KB Correct
175 Correct 79 ms 8564 KB Correct
176 Correct 79 ms 8208 KB Correct
177 Correct 78 ms 8512 KB Correct
178 Correct 92 ms 8588 KB Correct
179 Correct 78 ms 8016 KB Correct
180 Correct 82 ms 8180 KB Correct
181 Correct 77 ms 8444 KB Correct
182 Correct 87 ms 8436 KB Correct
183 Correct 80 ms 8076 KB Correct
184 Correct 77 ms 8380 KB Correct
185 Correct 218 ms 13296 KB Correct
186 Correct 224 ms 13704 KB Correct
187 Correct 102 ms 14792 KB Correct
188 Correct 112 ms 15324 KB Correct
189 Correct 211 ms 15256 KB Correct
190 Correct 88 ms 15420 KB Correct
191 Correct 84 ms 13564 KB Correct
192 Correct 205 ms 13996 KB Correct
193 Correct 212 ms 14712 KB Correct
194 Correct 141 ms 13784 KB Correct
195 Correct 112 ms 15584 KB Correct
196 Correct 274 ms 13812 KB Correct
197 Correct 83 ms 13052 KB Correct
198 Correct 84 ms 13632 KB Correct
199 Correct 229 ms 14788 KB Correct
200 Correct 232 ms 16216 KB Correct
201 Correct 130 ms 12772 KB Correct
202 Correct 95 ms 13484 KB Correct
203 Correct 150 ms 13052 KB Correct
204 Correct 84 ms 15280 KB Correct
205 Correct 87 ms 14060 KB Correct
206 Correct 201 ms 13960 KB Correct
207 Correct 218 ms 14332 KB Correct
208 Correct 101 ms 13552 KB Correct
209 Correct 94 ms 14496 KB Correct
210 Correct 95 ms 13256 KB Correct
211 Correct 82 ms 13812 KB Correct
212 Correct 92 ms 14332 KB Correct
213 Correct 215 ms 14364 KB Correct
214 Correct 188 ms 12996 KB Correct
215 Correct 97 ms 15480 KB Correct
216 Correct 246 ms 14372 KB Correct
217 Correct 235 ms 14728 KB Correct
218 Correct 84 ms 13232 KB Correct
219 Correct 87 ms 12836 KB Correct
220 Correct 218 ms 14332 KB Correct
221 Correct 187 ms 14248 KB Correct
222 Correct 236 ms 15240 KB Correct
223 Correct 142 ms 15528 KB Correct
224 Correct 212 ms 15208 KB Correct
225 Correct 99 ms 14512 KB Correct
226 Correct 98 ms 14368 KB Correct
227 Correct 197 ms 14284 KB Correct
228 Correct 184 ms 12768 KB Correct
229 Correct 98 ms 13404 KB Correct
230 Correct 90 ms 13888 KB Correct
231 Correct 111 ms 14420 KB Correct
232 Correct 91 ms 12972 KB Correct
233 Correct 100 ms 15004 KB Correct
234 Correct 101 ms 11468 KB Correct
235 Correct 99 ms 11348 KB Correct
236 Correct 56 ms 6036 KB Correct
237 Correct 57 ms 5964 KB Correct
238 Correct 61 ms 5960 KB Correct
239 Correct 39 ms 4808 KB Correct
240 Incorrect 89 ms 7868 KB Not correct
241 Halted 0 ms 0 KB -