#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;
pair<int, int> find_edge(vector<int> p1, vector<int> p2) {
if (p1.size() == 1 && p2.size() == 1) {
return {p1[0], p2[0]};
}
if (p1.size() == 1) {
int m = (int)p2.size() / 2;
vector<int> left = vector<int>(p2.begin(), p2.begin() + m);
vector<int> right = vector<int>(p2.begin() + m, p2.end());
if (are_connected(p1, left))
return find_edge(p1, left);
else
return find_edge(p1, right);
}
else {
int m = (int)p1.size() / 2;
vector<int> left = vector<int>(p1.begin(), p1.begin() + m);
vector<int> right = vector<int>(p1.begin() + m, p1.end());
if (are_connected(left, p2))
return find_edge(left, p2);
else
return find_edge(right, p2);
}
}
vector<int> longest_trip(int N, int D)
{
if (D == 3) {
vector<int> res(N);
iota(res.begin(), res.end(), 0);
return res;
}
if (D == 2) {
deque<int> dq = {0};
vector<bool> chk(N);
for (int i = 1; i < N; i++) {
if (are_connected({0}, {i})) {
dq.push_back(i);
chk[i] = true;
break;
}
}
for (int i = 1; i < N; i++) {
if (chk[i]) continue;
if (are_connected({i}, {dq.back()}))
dq.push_back(i);
else
dq.push_front(i);
}
return vector<int>(dq.begin(), dq.end());
}
vector<int> path = {0};
vector<int> clique;
int p = 1;
while (true) {
if (!clique.empty() && are_connected({path.back()}, clique)) {
int s = -1;
for (int x : clique) {
if (are_connected({x}, {path.back()})) {
s = x;
break;
}
}
path.push_back(s);
for (int x : clique) if (s != x) {
path.push_back(x);
}
clique.clear();
}
else {
while (p < N && !are_connected({path.back()}, {p})) {
clique.push_back(p++);
}
if (p == N) break;
path.push_back(p++);
}
}
if (clique.empty() || !are_connected(path, clique)) {
if (path.size() < clique.size())
return clique;
else
return path;
}
auto [u, v] = find_edge(path, clique);
vector<int> ans;
for (int x : clique) if (x != v) ans.push_back(x);
ans.push_back(v);
bool f = false;
p = find(path.begin(), path.end(), u) - path.begin();
for (int i = p; i < path.size(); i++) ans.push_back(path[i]);
for (int i = 0; i < p; i++) ans.push_back(path[i]);
return path;
}
Compilation message
longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:92:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
92 | for (int i = p; i < path.size(); i++) ans.push_back(path[i]);
| ~~^~~~~~~~~~~~~
longesttrip.cpp:90:7: warning: unused variable 'f' [-Wunused-variable]
90 | bool f = false;
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
3 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
208 KB |
Output is correct |
2 |
Correct |
9 ms |
208 KB |
Output is correct |
3 |
Correct |
7 ms |
208 KB |
Output is correct |
4 |
Correct |
7 ms |
208 KB |
Output is correct |
5 |
Correct |
9 ms |
208 KB |
Output is correct |
6 |
Correct |
8 ms |
208 KB |
Output is correct |
7 |
Correct |
9 ms |
208 KB |
Output is correct |
8 |
Correct |
8 ms |
208 KB |
Output is correct |
9 |
Correct |
6 ms |
208 KB |
Output is correct |
10 |
Correct |
10 ms |
208 KB |
Output is correct |
11 |
Correct |
9 ms |
208 KB |
Output is correct |
12 |
Correct |
9 ms |
208 KB |
Output is correct |
13 |
Correct |
10 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
208 KB |
Output is correct |
2 |
Correct |
9 ms |
208 KB |
Output is correct |
3 |
Correct |
10 ms |
208 KB |
Output is correct |
4 |
Correct |
7 ms |
208 KB |
Output is correct |
5 |
Correct |
10 ms |
208 KB |
Output is correct |
6 |
Correct |
14 ms |
208 KB |
Output is correct |
7 |
Correct |
10 ms |
208 KB |
Output is correct |
8 |
Correct |
9 ms |
208 KB |
Output is correct |
9 |
Correct |
9 ms |
208 KB |
Output is correct |
10 |
Correct |
7 ms |
208 KB |
Output is correct |
11 |
Correct |
9 ms |
208 KB |
Output is correct |
12 |
Correct |
6 ms |
208 KB |
Output is correct |
13 |
Correct |
7 ms |
208 KB |
Output is correct |
14 |
Correct |
14 ms |
208 KB |
Output is correct |
15 |
Correct |
8 ms |
208 KB |
Output is correct |
16 |
Correct |
11 ms |
208 KB |
Output is correct |
17 |
Correct |
10 ms |
208 KB |
Output is correct |
18 |
Correct |
9 ms |
208 KB |
Output is correct |
19 |
Correct |
8 ms |
208 KB |
Output is correct |
20 |
Correct |
9 ms |
208 KB |
Output is correct |
21 |
Correct |
7 ms |
208 KB |
Output is correct |
22 |
Correct |
10 ms |
208 KB |
Output is correct |
23 |
Correct |
11 ms |
208 KB |
Output is correct |
24 |
Correct |
11 ms |
208 KB |
Output is correct |
25 |
Correct |
10 ms |
208 KB |
Output is correct |
26 |
Correct |
13 ms |
208 KB |
Output is correct |
27 |
Correct |
14 ms |
208 KB |
Output is correct |
28 |
Correct |
13 ms |
208 KB |
Output is correct |
29 |
Correct |
13 ms |
208 KB |
Output is correct |
30 |
Correct |
12 ms |
208 KB |
Output is correct |
31 |
Correct |
12 ms |
208 KB |
Output is correct |
32 |
Correct |
10 ms |
208 KB |
Output is correct |
33 |
Correct |
14 ms |
208 KB |
Output is correct |
34 |
Correct |
13 ms |
208 KB |
Output is correct |
35 |
Correct |
15 ms |
208 KB |
Output is correct |
36 |
Correct |
9 ms |
332 KB |
Output is correct |
37 |
Correct |
16 ms |
208 KB |
Output is correct |
38 |
Correct |
14 ms |
208 KB |
Output is correct |
39 |
Correct |
17 ms |
208 KB |
Output is correct |
40 |
Correct |
14 ms |
336 KB |
Output is correct |
41 |
Correct |
17 ms |
208 KB |
Output is correct |
42 |
Correct |
16 ms |
208 KB |
Output is correct |
43 |
Correct |
13 ms |
208 KB |
Output is correct |
44 |
Correct |
13 ms |
236 KB |
Output is correct |
45 |
Correct |
12 ms |
208 KB |
Output is correct |
46 |
Correct |
14 ms |
208 KB |
Output is correct |
47 |
Incorrect |
2 ms |
208 KB |
Incorrect |
48 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
208 KB |
Output is correct |
2 |
Correct |
9 ms |
208 KB |
Output is correct |
3 |
Correct |
10 ms |
208 KB |
Output is correct |
4 |
Correct |
8 ms |
208 KB |
Output is correct |
5 |
Correct |
9 ms |
208 KB |
Output is correct |
6 |
Incorrect |
1 ms |
208 KB |
Incorrect |
7 |
Halted |
0 ms |
0 KB |
- |