Submission #6229243


Source Code Expand

import sys
input = sys.stdin.readline
from scipy.sparse import *

N,M,K = map(int,input().split())
C = input().split()
A,B = [],[]
for _ in range(M):
    a,b = map(lambda x: int(x)-1,input().split())
    A.append(a)
    B.append(b)

graph = csr_matrix(([1]*M,(A,B)),(N,N))

_,labels = csgraph.connected_components(graph,connection='strong')

# 縮約して作り直し
N = labels.max()
alphabets = [[] for _ in range(N+1)]
edges = [set() for _ in range(N+1)]

for i,c in enumerate(C):
    alphabets[labels[i]].append(c)
for a,b in zip(A,B):
    a1 = labels[a]
    b1 = labels[b]
    if a1 != b1:
        edges[a1].add(b1)

INF = chr(ord('z')+1)
dp = [[INF]*(K+1) for _ in range(N+1)] # 出発、長さ -> 辞書最小

def dfs(x):
    if dp[x][0] != INF:
        return
    alphabets[x].sort()
    my_str = ''.join(alphabets[x])[:K]
    len_me = len(my_str)
    for i in range(len_me+1):
        dp[x][i] = my_str[:i]
    for y in edges[x]:
        dfs(y)
        for i in range(len_me+1):
            left = my_str[:i]
            if left == INF:
                break
            for j in range(K+1):
                if i+j > K:
                    break
                right = dp[y][j]
                if right == INF:
                    break
                s = left + right
                if dp[x][i+j] > s:
                    dp[x][i+j] = s

for i in range(N+1):
    dfs(i)

answer = INF
for i in range(N+1):
    if answer > dp[i][K]:
        answer = dp[i][K]
if answer == INF:
    answer = '-1'

print(answer)

Submission Info

Submission Time
Task C - 有向グラフ
User maspy
Language Python (3.4.3)
Score 100
Code Size 1588 Byte
Status AC
Exec Time 505 ms
Memory 27064 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 4
AC × 32
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt
All subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt, subtask1_manual01.txt, subtask1_manual02.txt, subtask1_manual03.txt, subtask1_manual04.txt, subtask1_manual05.txt, subtask1_manual06.txt, subtask1_manual07.txt, subtask1_manual08.txt, subtask1_random01.txt, subtask1_random02.txt, subtask1_random03.txt, subtask1_random04.txt, subtask1_random05.txt, subtask1_special01.txt, subtask1_special02.txt, subtask1_special03.txt, subtask1_special04.txt, subtask1_special05.txt, subtask1_special06.txt, subtask1_special07.txt, subtask1_special08.txt, subtask1_special09.txt, subtask1_special10.txt, subtask1_special11.txt, subtask1_special12.txt, subtask1_special13.txt, subtask1_special14.txt, subtask1_special15.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 505 ms 27064 KiB
subtask0_sample_02.txt AC 167 ms 13736 KiB
subtask0_sample_03.txt AC 170 ms 13724 KiB
subtask0_sample_04.txt AC 169 ms 13728 KiB
subtask1_manual01.txt AC 168 ms 13728 KiB
subtask1_manual02.txt AC 168 ms 15784 KiB
subtask1_manual03.txt AC 170 ms 13736 KiB
subtask1_manual04.txt AC 169 ms 13740 KiB
subtask1_manual05.txt AC 169 ms 13740 KiB
subtask1_manual06.txt AC 169 ms 13740 KiB
subtask1_manual07.txt AC 169 ms 13736 KiB
subtask1_manual08.txt AC 168 ms 13728 KiB
subtask1_random01.txt AC 183 ms 14116 KiB
subtask1_random02.txt AC 171 ms 13732 KiB
subtask1_random03.txt AC 179 ms 13856 KiB
subtask1_random04.txt AC 174 ms 13740 KiB
subtask1_random05.txt AC 170 ms 13728 KiB
subtask1_special01.txt AC 169 ms 13736 KiB
subtask1_special02.txt AC 176 ms 13860 KiB
subtask1_special03.txt AC 186 ms 14120 KiB
subtask1_special04.txt AC 197 ms 14628 KiB
subtask1_special05.txt AC 201 ms 15136 KiB
subtask1_special06.txt AC 192 ms 15852 KiB
subtask1_special07.txt AC 184 ms 14828 KiB
subtask1_special08.txt AC 190 ms 15856 KiB
subtask1_special09.txt AC 193 ms 15852 KiB
subtask1_special10.txt AC 191 ms 15852 KiB
subtask1_special11.txt AC 189 ms 15392 KiB
subtask1_special12.txt AC 188 ms 15052 KiB
subtask1_special13.txt AC 187 ms 14888 KiB
subtask1_special14.txt AC 169 ms 13864 KiB
subtask1_special15.txt AC 202 ms 14636 KiB