제출 #1240547

#제출 시각아이디문제언어결과실행 시간메모리
1240547vako_p가장 긴 여행 (IOI23_longesttrip)C++20
15 / 100
333 ms432 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define sd second #define debug(x) cerr << #x << "----> " << x << endl; //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("O3") int n; vector<int> f(vector<int> vv, vector<vector<bool>> &edge){ vector<int> x(n + 5, 1); for(int i = 0; i < vv.size(); i++){ for(int j = i + 1; j < vv.size(); j++){ if(edge[vv[i]][vv[j]]){ x[i]++; x[j]++; } } } ll idx = 0,mn = vv.size(); for(int i = 0; i < vv.size(); i++){ if(mn > x[i]){ mn = x[i]; idx = i; } } if(mn == vv.size()) return vv; vector<int> vv1,vv2,vv3; for(int i = 0; i < vv.size(); i++){ if(!edge[vv[i]][vv[idx]]) vv1.pb(vv[i]); } for(int i = 0; i < vv.size(); i++){ int ok = 0; for(auto it : vv1){ if(edge[vv[i]][it]) ok = max(ok, 1); if(it == vv[i]) ok = 2; } if(!ok) vv3.pb(vv[i]); else if(ok == 1) vv2.pb(vv[i]); } if(vv2.empty()){ if(vv1.size() > vv3.size()) return vv1; return vv3; } bool fir = true; for(auto it : vv2){ bool ok = true; for(auto it1 : vv1){ if(!edge[it][it1]) ok = false; } fir = ok; if(ok) vv1.pb(it); else vv3.pb(it); } ll num; if(!fir) swap(vv1, vv3); for(auto it : vv3) if(edge[it][vv1[vv1.size() - 1]]) num = it; vv1.pb(num); for(auto it : vv3) if(it != num) vv1.pb(it); return vv1; } std::vector<int> longest_trip(int N, int D){ n = N; vector<vector<bool>> edge(n + 5, vector<bool>(n + 5, false)); for(int i = 0; i < n; i++){ edge[i][i] = true; for(int j = i + 1; j < n; j++){ if(!are_connected({i}, {j})) continue; edge[i][j] = edge[j][i] = true; } } vector<int> v; for(int i = 0; i < n; i++) v.pb(i); return f(v, edge); }
#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...