[Python] DFS (Tiefenprioritätssuche) ABC157D

ABC157D

UnionFind Tree ist der Standard, aber Anfänger sollten zuerst DFS beherrschen. Verwenden Sie keine rekursiven Funktionen für einfache Operationen.

Referenz ABC 157 D Sanfter Kommentar zum Problem

Beispielcode


N, M, K = map(int, input().split())
F = [[] for _ in range(N)]
B = [[] for _ in range(N)]

#Angrenzende Freundesliste
for _ in range(M):
    a, b = map(int, input().split())
    a, b = a - 1, b - 1
    F[a].append(b)
    F[b].append(a)

#Benachbarte Liste von Blöcken
for _ in range(K):
    c, d = map(int, input().split())
    c, d = c - 1, d - 1
    B[c].append(d)
    B[d].append(c)


#Freundschaftsgruppe (Wörterbuchtyp)
D = {}
#Gruppenelternteil
parent = [-1] * N
#Besuchen Sie das Management
visited = [False] * N

for root in range(N):
    if visited[root]:
        continue

    D[root] = set([root])
    #Besuchter Stapel
    stack = [root]
    #Bis es keine Orte mehr zu besuchen gibt
    while stack:
        #Pop-up-Besucher
        n = stack.pop()
        #Besuchter Besucher
        visited[n] = True
        #Stellen Sie die Eltern für eine Gruppe von Besuchern ein
        parent[n] = root

        #Fügen Sie Root-Freunde zu Gruppen und Zielen hinzu
        for to in F[n]:
            if visited[to]:
                continue
            D[root].add(to)
            stack.append(to)

ans = [0] * N
for iam in range(N):
    #Richten Sie Ihre eigene Freundschaftsgruppe ein
    group = D[parent[iam]]
    #Entfernen Sie Freunde und sich selbst aus der Gruppe
    tmp_ans = len(group) - len(F[iam]) - 1
    #Blöcke aus der Gruppe entfernen
    for block in B[iam]:
        if block in group:
            tmp_ans -= 1
    ans[iam] = tmp_ans

print(*ans, sep=' ')

Recommended Posts

[Python] DFS (Tiefenprioritätssuche) ABC157D
[Python] DFS (Tiefenprioritätssuche) ATC001A
Algorithmus in Python (Tiefenprioritätssuche, dfs)
[Python] Bisection-Suche ABC155D
[Python] BFS (Suche nach Breitenpriorität) ABC168D
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
[Python] ABC175D
Implementieren Sie die Suche nach Tiefenpriorität (DFS) und die Suche nach Breitenpriorität (BFS) in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Suche nach Tiefenpriorität mit Stack in Python
[Python] DP ABC184D
[Python] DFS AGC044A
[Python] UnionFind ABC177D
Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)
Löse ABC168D in Python
Löse ABC167-D mit Python
Python-Übung 1-Breiten-Prioritätssuche
[Python] Suche (itertools) ABC167C
[Python] Suche (NumPy) ABC165C
Memo zur Bisektionssuche (python2.7)
Löse ABC159-D in Python
Python Bit vollständige Suche
Lineare Suche in Python
Dichotomie mit Python
Dichotomie mit Python 3
Suchen Sie Twitter mit Python
Binäre Suche in Python
[Python] Kumulative Summe ABC179D
Suche nach Breitenpriorität / bidirektionale Suche (Python Edition)
Suchalgorithmus mit word2vec [Python]
Homebrew Python - Youtube Suchprogramm
[At Coder] Lösen Sie typische Probleme der Tiefenprioritätssuche (DFS).
Binäre Suche in Python / C ++
Algorithmus in Python (Dichotomie)
Vollbit-Suche mit Python
Suchmaschinen arbeiten mit Python
Suche nach Twitter-Tweets mit Python
Optimieren Sie die Websuche mit Python
Suche nach Tiefenpriorität (nicht rekursiver Typ) und Bereinigungsmethode für die untere Grenze (Python Edition)
[Python-Algorithmus] Ein Programm, das einige deutsche Antworten aus einer Suche mit Tiefenpriorität ausgibt
Algorithmus in Python (Breitenprioritätssuche, bfs)
Schreiben Sie eine Dichotomie in Python
[Python] Wie man nCk ableitet (ABC156-D)
Suche nach Breitenpriorität (BPF) Vielleicht verstanden (Python)
Beherrsche die lineare Suche! ~ Python-Implementierungsversion ~
(Python) ABC162-D Diskussionsprotokoll und Lösung
Reproduzieren Sie die One-Touch-Suche mit Python 3.7.3. (Windows 10)
Python 2-Minuten-Suche und ihre Ableitungen