कठिन 0 हल किए गए 0% स्वीकृति

Strongly Connected Components

Count groups of nodes that can all reach each other.

आप क्या सीखेंगे

  • आपस में पहुँच सकने वाले नोड के समूह ढूँढना
  • DFS समाप्ति क्रम या low-link मान उपयोग करना
  • दिशात्मक ग्राफ़ के साथ काम करना

समस्या

In a directed graph with nodes 0..n−1, a strongly connected component is a maximal group of nodes where every node can reach every other. Count the components (Kosaraju's or Tarjan's algorithm).

Implement count_scc(n, edges).

Input

n: The number of nodes. edges: Directed edges as [from, to].

Output

Return the number of components.

सीमाएँ

1 ≤ n ≤ 100,000; 0 ≤ edges ≤ 200,000

उदाहरण

उदाहरण 1
इनपुट:
n = 5
edges = [
    [0, 1],
    [1, 2],
    [2, 0],
    [3, 4]
]

अपेक्षित आउटपुट:
expected = 3
इनपुट:
long long n = 5;
std::vector<std::vector<long long>> edges = {
    {0, 1},
    {1, 2},
    {2, 0},
    {3, 4}
};

अपेक्षित आउटपुट:
long long expected = 3;
इनपुट:
long n = 5;
long[][] edges = new long[][] {
    new long[] {0, 1},
    new long[] {1, 2},
    new long[] {2, 0},
    new long[] {3, 4}
};

अपेक्षित आउटपुट:
long expected = 3;

व्याख्या

0, 1, 2 form a cycle (one component); 3 and 4 can't reach each other, so they are separate: 3.

उदाहरण 2
इनपुट:
n = 3
edges = [
    [0, 1],
    [1, 0],
    [1, 2],
    [2, 1]
]

अपेक्षित आउटपुट:
expected = 1
इनपुट:
long long n = 3;
std::vector<std::vector<long long>> edges = {
    {0, 1},
    {1, 0},
    {1, 2},
    {2, 1}
};

अपेक्षित आउटपुट:
long long expected = 1;
इनपुट:
long n = 3;
long[][] edges = new long[][] {
    new long[] {0, 1},
    new long[] {1, 0},
    new long[] {1, 2},
    new long[] {2, 1}
};

अपेक्षित आउटपुट:
long expected = 1;

व्याख्या

All three nodes reach each other: 1.

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

एक node सिर्फ तब दूसरे के साथ होगी जब दोनों एक-दूसरे तक पहुँच सकें, इसलिए साधारण reachability नहीं, mutual reachability वाले regions सोचें.

संकेत 2

पहले original graph पर traversal order निकालें, फिर reversed graph पर चलकर एक-एक region इकट्ठा करें.

संकेत 3

finishing order और isolated nodes पर ध्यान दें; हर node को ठीक एक बार assign करना है, भले उसके incoming या outgoing edges न हों.

अपेक्षित जटिलता

समय O(n + m), अतिरिक्त स्थान O(n + m)

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।