Почему вторая реализация быстрее первой? - PullRequest
0 голосов
/ 29 мая 2019

Я недавно пытался представить свое решение для одной из проблем codeforces.Я успешно решил вопрос и попробовал различные тестовые случаи, и код работал правильно на моей локальной машине.Время было 2 секунды в задаче.Я пытался представить решение, но в нем говорилось, что срок превышен.

ЗДЕСЬ КОД (моя реализация)

def find(u):
    if parent[u] == u:
        return u
    parent[u] = find(parent[u])
    return parent[u]

n,m = map(int,input().split())
parent = [i for i in range(n+1)]
ans = [0 for i in range(n+1)]

for i in range(1,m+1):
    grp = [int(i) for i in input().split()][1:]
    if len(grp) == 0:
        continue
    x = find(grp[0])
    for i in grp[1:]:
        parent[find(i)] = x
for i in range(1,n+1):
    ans[find(i)] += 1
ans = " ".join(map(str,[ans[find(u)] for u in range(1, n + 1)]))
print(ans)

Затем я внес некоторые изменения в код, и он был успешно отправлен наcodeforces.

ВТОРАЯ РЕАЛИЗАЦИЯ:

from sys import stdin
from sys import stdout

def find(u):
    if parent[u] == u:
        return u
    parent[u] = find(parent[u])
    return parent[u]

n, m = map(int, stdin.readline().split())
parent = [i for i in range(n+1)]
ans = [0 for i in range(1+n)]
for i in range(1,m+1):
    grp= [int(u) for u in stdin.readline().split()][1:]
    if(len(grp)==0):
        continue
    x = find(grp[0])
    for i in grp[1:]:
        parent[find(i)] = x

for i in range(1,n+1):
    ans[find(i)]+=1
pprintit = ' '.join(map(str, [ans[find(u)] for u in range(1, n + 1)]))
stdout.write('%s' % pprintit)

Мой вопрос:

Является ли stdin быстрее, чем input (), потому что, просто изменив методы ввода-вывода, я мог бы отправитьрешение

Я использую Python 3.7.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...