Submission #260099

#TimeUsernameProblemLanguageResultExecution timeMemory
260099MiricaMateiSailing Race (CEOI12_race)C++14
40 / 100
537 ms4856 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 505;

int n;
vector<int>G[MAXN];
int dp[MAXN][MAXN][3];
int mc[MAXN][MAXN];

int prv(int i) {
  i--;
  if (i == 0)
    i = n;
  return i;
}

int nxt(int i) {
  i++;
  if (i == n + 1)
    i = 1;
  return i;
}

int solve(int x, int y, int t) {
  if (dp[x][y][t] != -1)
    return dp[x][y][t];
  if (t == 0) {
    int mx = 0;
    for (int i = y; i != x; i = prv(i))
      if (mc[y][i])
        mx = max(mx, max(solve(x, i,  0), solve(y, i, 1)));
    dp[x][y][t] = 1 + mx;
  } else {
    int mx = 0;
    for (int i = y; i != x; i = nxt(i))
      if (mc[y][i])
        mx = max(mx, max(solve(y, i, 0), solve(x, i, 1)));
    dp[x][y][t] = 1 + mx;
  }
  return dp[x][y][t];
}

int main() {
  //freopen("date.in", "r", stdin);
  //freopen("date.out", "w", stdout);

  int k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    int x;
    scanf("%d", &x);
    while (x != 0) {
      G[i].push_back(x);
      mc[i][x] = 1;
      scanf("%d", &x);
    }
    for (int j = 1; j <= n; ++j)
      dp[i][j][0] = dp[i][j][1] = -1;
  }

  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      if (mc[i][j]) {
        dp[i][j][0] = solve(i, j, 0);
        dp[i][j][1] = solve(i, j, 1);
      }

  int ans = 0, w = 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      for (int t = 0; t <= 1; ++t)
        if (dp[i][j][t] > ans) {
          ans = dp[i][j][t];
          w = i;
        }

  printf("%d\n%d\n", ans, w);

  return 0;
}

Compilation message (stderr)

race.cpp: In function 'int main()':
race.cpp:50:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &n, &k);
   ~~~~~^~~~~~~~~~~~~~~~
race.cpp:53:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &x);
     ~~~~~^~~~~~~~~~
race.cpp:57:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d", &x);
       ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...