Submission #702203

#TimeUsernameProblemLanguageResultExecution timeMemory
702203JosiaSailing Race (CEOI12_race)C++17
40 / 100
458 ms16468 KiB
#include <bits/stdc++.h> #define int int64_t using namespace std; vector<vector<bool>> graphRev; int n; bool type; int DP[500][500][2][2]; void init() { for (int i=0; i<500; i++) { for (int j = 0; j<500; j++) { for (int k = 0; k<2; k++) { for (int l = 0; l<2; l++) { DP[i][j][k][l] = -1; } } } } } int dp(int l, int r, bool pos, bool start) { if (DP[l][r][pos][start] != -1) return DP[l][r][pos][start]; int res = 0; for (int v = (l+1)%n; v!=r; v=(v+1)%n) { if (!graphRev[pos?r:l][v]) continue; // if (pos==0) { res = max(dp(l, v, 1, 0)+1, res); res = max(dp(v, r, 0, 0)+1, res); // } // if (pos==1) { // res = max(dp(l, v, 1, 0)+1, res); // res = max(dp(v, r, 0, 0)+1, res); // } } // cerr << l << " " << r << " " << res << "\n"; return DP[l][r][pos][start] = res; } signed main() { cin.tie(0); ios_base::sync_with_stdio(0); init(); cin >> n; cin >> type; graphRev.assign(n,vector<bool>(n, 0)); for (int i = 0; i<n; i++) { int x; cin >> x; while (x!=0) { // graphRev[x-1][i]=1; graphRev[i][x-1]=1; cin >> x; } } // for (auto i: graphRev) { // for (int j: i) cerr << j << " "; // cerr << "\n"; // } // cerr << "\n"; if (type == 0) { int res = 0; int ind = -1; for (int i = 0; i<n; i++) { if (dp(i, i, 0, 1) > res) { res = dp(i, i, 0, 1); ind = i; } // cerr << "---------\n"; } cout << res << "\n" << ind+1 << "\n"; return 0; } assert(0); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...