Submission #1079619

#TimeUsernameProblemLanguageResultExecution timeMemory
1079619c2zi6Longest Trip (IOI23_longesttrip)C++17
25 / 100
918 ms1544 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 "longesttrip.h" int n; VVI gp; VVI edges; VI rev(VI a) { reverse(all(a)); return a; } VI longest_trip(int N, int D) { assert(D == 1); n = N; gp = VVI(n); edges = VVI(n, VI(n)); replr(i, 0, n-1) { replr(j, i+1, n-1) { if (are_connected({i}, {j})) { gp[i].pb(j); gp[j].pb(i); edges[i][j] = edges[j][i] = true; } } } VI path1; VI path2; path1.pb(0); path2.pb(1); replr(u, 2, n-1) { if (edges[path1.back()][u]) path1.pb(u); else if (edges[path2.back()][u]) path2.pb(u); else { for (int u : rev(path2)) path1.pb(u); path2 = VI{u}; } } if (edges[path2[0]][path1[0]]) { VI ans; for (int x : rev(path2)) ans.pb(x); for (int x : path1) ans.pb(x); return ans; } if (edges[path2.back()][path1[0]]) { VI ans; for (int x : path2) ans.pb(x); for (int x : path1) ans.pb(x); return ans; } /* now I know that path2 is also a cycle */ if (edges[path1.back()][path2[0]]) { VI ans; for (int x : path1) ans.pb(x); for (int x : path2) ans.pb(x); return ans; } /* now I know that path2 is also a cycle */ if (path1.size() > path2.size()) return path1; return path2; }
#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...