#ifndef Nhoksocqt1
#include "longesttrip.h"
#endif // Nhoksocqt1
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define sz(x) int((x).size())
#define fi first
#define se second
typedef long long ll;
typedef pair<int, int> ii;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int Random(int l, int r) {
return uniform_int_distribution<int>(l, r)(rng);
}
const int MAXN = 260;
#ifdef Nhoksocqt1
bitset<MAXN> adjp[MAXN], idA, idB, bsA, bsB;
struct Jury {
int n, d;
void init(int _n, int _d) {
n = _n, d = _d;
int u, v;
bool check(0);
while(cin >> u >> v) {
adjp[u][v] = adjp[v][u] = 1;
check = 1;
}
if(!check) {
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
for (int k = j + 1; k < n; ++k) {
int cnt = adjp[i][j] + adjp[i][k] + adjp[j][k];
if(cnt < d) {
vector<ii> p;
p.push_back(ii(i, j));
p.push_back(ii(i, k));
p.push_back(ii(j, k));
while(cnt < d) {
int r = Random(0, 2);
if(adjp[p[r].fi][p[r].se])
continue;
++cnt;
adjp[p[r].fi][p[r].se] = adjp[p[r].se][p[r].fi] = 1;
cout << p[r].fi << ' ' << p[r].se << '\n';
}
}
}
}
}
}
}
bool are_connected(vector<int> &A, vector<int> &B) {
bsA = bsB = idA = idB = 0;
for (int it = 0; it < sz(A); ++it) {
bsA |= adjp[A[it]];
idA[A[it]] = 1;
}
for (int it = 0; it < sz(B); ++it) {
bsB |= adjp[B[it]];
idB[B[it]] = 1;
}
return ((bsA & idB).count() > 0 || (bsB & idA).count() > 0);
}
} jury;
#endif // Nhoksocqt1
vector<int> A[MAXN];
int nxt[MAXN], numNode;
bool adj[MAXN][MAXN], dx[MAXN];
bool check_are_connected(vector<int> &A, vector<int> &B) {
#ifdef Nhoksocqt1
return jury.are_connected(A, B);
#else
return are_connected(A, B);
#endif // Nhoksocqt1
}
int evaluation(int u, int lenNow, int pNxt[]) {
int nxt[numNode + 1];
for (int i = 0; i <= numNode; ++i)
nxt[i] = pNxt[i];
vector<int> tmp;
while(1) {
dx[u] = 1;
tmp.push_back(u);
++lenNow;
int v(-1), prv(-1);
for (int i = nxt[numNode], j = numNode; i < numNode; j = i, i = nxt[i]) {
if(!dx[i] && adj[u][i]) {
v = i, prv = j;
break;
}
}
if(v < 0)
break;
nxt[prv] = nxt[v];
u = v;
}
while(sz(tmp)) {
dx[tmp.back()] = 0;
tmp.pop_back();
}
return lenNow;
}
int evaluation2(int u, int lenNow, int pNxt[], vector<int> &ans) {
int nxt[numNode + 1];
for (int i = 0; i <= numNode; ++i)
nxt[i] = pNxt[i];
vector<int> tmp;
while(1) {
dx[u] = 1;
tmp.push_back(u);
++lenNow;
int maxLen(0), v(-1), prv(-1);
for (int i = nxt[numNode], j = numNode; i < numNode; j = i, i = nxt[i]) {
if(!dx[i] && adj[u][i]) {
int len = evaluation(i, lenNow, nxt);
if(maxLen < len) {
maxLen = len;
v = i, prv = j;
if(maxLen == numNode)
break;
}
}
}
if(v < 0)
break;
nxt[prv] = nxt[v];
u = v;
}
ans = tmp;
while(sz(tmp)) {
dx[tmp.back()] = 0;
tmp.pop_back();
}
return lenNow;
}
vector<int> longest_trip(int N, int D) {
numNode = N;
if(D == 3) {
vector<int> ans;
for (int i = 0; i < numNode; ++i)
ans.push_back(i);
return ans;
}
for (int u = 0; u < numNode; ++u) {
for (int v = u + 1; v < numNode; ++v) {
vector<int> A, B;
A.push_back(u);
B.push_back(v);
adj[u][v] = adj[v][u] = check_are_connected(A, B);
}
}
nxt[numNode] = 0;
for (int i = 0; i < numNode; ++i) {
dx[i] = 0;
nxt[i] = i + 1;
}
vector<int> p;
for (int i = 0; i < numNode; ++i)
p.push_back(i);
shuffle(p.begin(), p.end(), rng);
vector<int> ans;
for (int it = 0; it < sz(p); ++it) {
int i(p[it]);
int len = evaluation2(i, 0, nxt, ans);
if(len == numNode)
break;
}
return ans;
}
#ifdef Nhoksocqt1
int main(void) {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define TASK "longesttrip"
if(fopen(TASK".inp", "r")) {
freopen(TASK".inp", "r", stdin);
freopen(TASK".out", "w", stdout);
}
int n, d;
cin >> n >> d;
jury.init(n, d);
vector<int> path = longest_trip(n, d);
cout << "ANSWER: " << sz(path) << ": ";
for (int it = 0; it < sz(path); ++it)
cout << path[it] << ' '; cout << '\n';
return 0;
}
#endif // Nhoksocqt1
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
181 ms |
600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
344 KB |
Output is correct |
5 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
344 KB |
Output is correct |
2 |
Correct |
23 ms |
344 KB |
Output is correct |
3 |
Correct |
123 ms |
600 KB |
Output is correct |
4 |
Correct |
380 ms |
464 KB |
Output is correct |
5 |
Correct |
750 ms |
496 KB |
Output is correct |
6 |
Correct |
6 ms |
344 KB |
Output is correct |
7 |
Correct |
24 ms |
344 KB |
Output is correct |
8 |
Correct |
127 ms |
344 KB |
Output is correct |
9 |
Correct |
313 ms |
592 KB |
Output is correct |
10 |
Correct |
674 ms |
492 KB |
Output is correct |
11 |
Correct |
801 ms |
496 KB |
Output is correct |
12 |
Correct |
754 ms |
600 KB |
Output is correct |
13 |
Correct |
738 ms |
488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
344 KB |
Output is correct |
2 |
Correct |
29 ms |
344 KB |
Output is correct |
3 |
Correct |
131 ms |
344 KB |
Output is correct |
4 |
Correct |
339 ms |
468 KB |
Output is correct |
5 |
Correct |
711 ms |
1012 KB |
Output is correct |
6 |
Correct |
7 ms |
344 KB |
Output is correct |
7 |
Correct |
26 ms |
344 KB |
Output is correct |
8 |
Correct |
115 ms |
344 KB |
Output is correct |
9 |
Correct |
257 ms |
456 KB |
Output is correct |
10 |
Correct |
681 ms |
488 KB |
Output is correct |
11 |
Correct |
707 ms |
488 KB |
Output is correct |
12 |
Correct |
734 ms |
488 KB |
Output is correct |
13 |
Correct |
696 ms |
600 KB |
Output is correct |
14 |
Correct |
6 ms |
344 KB |
Output is correct |
15 |
Incorrect |
3 ms |
344 KB |
Incorrect |
16 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
344 KB |
Output is correct |
2 |
Correct |
25 ms |
344 KB |
Output is correct |
3 |
Partially correct |
123 ms |
344 KB |
Output is partially correct |
4 |
Partially correct |
373 ms |
464 KB |
Output is partially correct |
5 |
Partially correct |
741 ms |
592 KB |
Output is partially correct |
6 |
Correct |
8 ms |
344 KB |
Output is correct |
7 |
Correct |
27 ms |
344 KB |
Output is correct |
8 |
Partially correct |
135 ms |
344 KB |
Output is partially correct |
9 |
Partially correct |
257 ms |
344 KB |
Output is partially correct |
10 |
Partially correct |
713 ms |
492 KB |
Output is partially correct |
11 |
Partially correct |
792 ms |
1112 KB |
Output is partially correct |
12 |
Partially correct |
743 ms |
492 KB |
Output is partially correct |
13 |
Partially correct |
754 ms |
492 KB |
Output is partially correct |
14 |
Incorrect |
1 ms |
344 KB |
Incorrect |
15 |
Halted |
0 ms |
0 KB |
- |