Submission #1132036

#TimeUsernameProblemLanguageResultExecution timeMemory
1132036krishnaar2305Sailing Race (CEOI12_race)Pypy 3
0 / 100
3100 ms102332 KiB
import sys

# Constants
MAXN = 505
INF = int(1e9)

# Global variables
edge = [[0] * MAXN for _ in range(MAXN)]
dp = [[[0, 0] for _ in range(MAXN)] for _ in range(MAXN)]
dp1 = [[[0, 0] for _ in range(MAXN)] for _ in range(MAXN)]
nx = [[0, 0] for _ in range(MAXN)]
n = 0
type_ = 0

def solve(l, r, x):
    if edge[l][r]:
        dp[l][r][x] = 1
        dp1[l][r][x] = 1 + dp1[r][nx[l][x]][x ^ 1]
    else:
        dp[l][r][x] = -n
        dp1[l][r][x] = -n
    
    m = nx[l][x]
    while m != r:
        dp[l][r][x] = max(dp[l][r][x], dp[l][m][x] + dp[m][r][x])
        dp1[l][r][x] = max(dp1[l][r][x], dp[l][m][x] + dp1[m][r][x])
        m = nx[m][x]
    
    dp1[l][r][x] = max(dp1[l][r][x], dp1[l][nx[r][x ^ 1]][x])

def main():
    global n, type_
    n, type_ = map(int, input().split())
    
    for i in range(n):
        data = list(map(int, input().split()))
        idx = 0
        while data[idx] != 0:
            edge[i][data[idx] - 1] = 1
            idx += 1
        
        nx[i][0] = (i + 1) % n
        nx[i][1] = (i + n - 1) % n
    
    for d in range(1, n):
        for l in range(n):
            r = (l + d) % n
            solve(l, r, 0)
            solve(r, l, 1)
    
    ans = (-1, 0)
    for l in range(n):
        for r in range(n):
            for x in range(2):
                ans = max(ans, (dp1[l][r][x], l + 1))
    
    if type_:
        for l in range(n):
            for r in range(n):
                for x in range(2):
                    if dp[l][r][x] <= 0:
                        continue
                    st = nx[r][x]
                    while st != l and edge[st][l] == 0:
                        st = nx[st][x]
                    if st == l:
                        continue
                    ed = nx[st][x]
                    while ed != l:
                        if edge[r][ed]:
                            ans = max(ans, (max(dp1[ed][nx[l][x ^ 1]][x], dp1[ed][nx[st][x]][x ^ 1]) + 2 + dp[l][r][x], st + 1))
                        ed = nx[ed][x]
    
    print(ans[0])
    # print(ans[1])

if __name__ == '__main__':
    main()

Compilation message (stdout)

Compiling 'race.py'...

=======
  adding: __main__.pyc (deflated 56%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...