โจทย์
ดูต้นฉบับ (ภาษาอังกฤษ)ในกราฟแบบมีทิศทางที่มีโหนด 0..n−1, strongly connected component คือกลุ่มโหนดที่ใหญ่ที่สุดที่ทุกโหนดในกลุ่มสามารถเข้าถึงกันและกันได้ทั้งหมด จงนับจำนวน component (ใช้ Kosaraju's หรือ Tarjan's algorithm ก็ได้)
ให้เขียนฟังก์ชัน count_scc(n, edges)
อินพุต
n: จำนวนโหนด edges: รายการขอบแบบมีทิศทางในรูปแบบ [from, to]
เอาต์พุต
คืนค่าจำนวน component
เงื่อนไข
1 ≤ n ≤ 100,000; 0 ≤ edges ≤ 200,000
ตัวอย่าง
อินพุต:
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 สร้างวงจร (เป็น 1 component); โหนด 3 และ 4 ไม่สามารถเข้าถึงกันและกันได้ จึงเป็นคนละกลุ่ม: 3.
อินพุต:
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;
คำอธิบาย
ทั้งสามโหนดสามารถเข้าถึงกันและกันได้ทั้งหมด: 1.
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน