Tìm khớp và cầu (Cơ bản)

View as PDF

Submit solution


Points: 0.14 (partial)
Time limit: 1.0s
Memory limit: 512M
Input: stdin
Output: stdout

Problem source:
Bài cổ điển - tests added by canhteo
Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Xét đơn đồ thị vô hướng ~G =~ ~(V~, ~E)~ có ~N~ ~(1 \le N \le 10000)~ đỉnh và ~M~ ~(1 \le M \le 50000)~ cạnh. Người ta định nghĩa một đỉnh gọi là khớp nếu như xoá đỉnh đó sẽ làm tăng số thành phần liên thông của đồ thị. Tương tự như vậy, một cạnh được gọi là cầu nếu xoá cạnh đó sẽ làm tăng số thành phần liên thông của đồ thị.

Vấn đề đặt ra là cần phải đếm tất cả các khớp và cầu của đồ thị ~G~.

Input

  • Dòng đầu: chứa hai số tự nhiên ~N~, ~M~.
  • ~M~ dòng sau mỗi dòng chứa một cặp số ~(u~, ~v)~ ~(u~ khác ~v~, ~1 \le u \le N~, ~1 \le v < N)~ mô tả một cạnh của ~G~.

Output

  • Gồm một dòng duy nhất ghi hai số, số thứ nhất là số khớp, số thứ hai là số cầu của ~G~

Sample Input

10 12
1 10
10 2
10 3
2 4
4 5
5 2
3 6
6 7
7 3
7 8
8 9
9 7

Sample Output

4 3

Note

image


Comments

Please read the guidelines before commenting.



  • 0
    hoangquys  commented on Dec. 29, 2025, 3:03 p.m.

    2 test cuối duyệt brute force bình thường


  • 2
    vominhmanh10  commented on Nov. 1, 2025, 8:00 a.m. edit 2

    lỗi value error do vấn đề đọc input, hãy đọc toàn bộ trước và lưu từng phần

    import sys
    
    def dfs(u, par):
        global timer, canh_cau
        tin[u] = low[u] = timer
        timer += 1
        child = 0
        for v in adj[u]:
            if v == par:
                continue
            if tin[v] == 0:
                dfs(v, u)
                low[u] = min(low[u], low[v])
                if low[v] > tin[u]:
                    canh_cau += 1
                child += 1
                if par == -1:
                    if child > 1:
                        khop.add(u)
                else:
                    if low[v] >= tin[u]:
                        khop.add(u)
            else:
                low[u] = min(low[u], tin[v])
    
    input = sys.stdin.readline
    sys.setrecursionlimit(10**7)
    data = sys.stdin.read().strip().split()
    n, m = map(int, data[0:2])
    adj = [[] for _ in range(n + 1)]
    for i in range(2, 2 * m + 2, 2):
        u, v = int(data[i]), int(data[i + 1])
        adj[u].append(v)
        adj[v].append(u)
    tin = [0] * (n + 1)
    low = [0] * (n + 1)
    timer = 1
    khop = set()
    canh_cau = 0
    for i in range(1, n + 1):
        if tin[i] == 0:
            dfs(i, -1)
    print(len(khop), canh_cau)
    

  • -7
    yureki3657  commented on Aug. 31, 2025, 10:22 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 2
    tadanhdat123  commented on Aug. 9, 2025, 5:52 a.m. edited

    Input của bài có trường hợp một đồ thị không liên thông


    • 2
      pppssslc  commented on Aug. 9, 2025, 6:57 a.m. edited

      Đề bài cho đây là đơn đồ thị vô hướng rồi mà. Bạn đọc kĩ lại đề bài nha.


      • 3
        tadanhdat123  commented on Aug. 9, 2025, 8:40 a.m. edit 2

        Cảm ơn bạn nhìu nha, mình có lưu ý chỗ đó rồi á ( trùng với tất cả các điều kiện của bài trên ) . Nhưng bài này có nhiều bản sao, mình nộp bên OJ khác thì bị sai 2 trường hợp trên. Mình chỉ không hiểu chỗ đó thui bạn.


  • -7
    LVT_K66_TRANDUYBAO  commented on July 26, 2025, 1:55 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -8
    LVT_K66_TRANDUYBAO  commented on July 13, 2025, 10:18 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -13
    haiduong151109  commented on June 2, 2025, 11:18 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 5
    Free_De_La_Zenith  commented on March 18, 2025, 7:37 a.m.

    Nếu bạn bị dính WA 2 test cuối và muốn biết lí do tại sao sai: Input có thể cho một đồ thị không liên thông


  • -14
    phanthedan2009  commented on Feb. 14, 2025, 7:48 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -6
    avatarstar1133  commented on Feb. 13, 2025, 1:54 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -54
    tandochuyentin2022  commented on Sept. 3, 2024, 8:26 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 17
    levanhuyluc  commented on Sept. 3, 2024, 7:06 a.m.

    Nếu bạn đã hoàn thành bài này và cảm thấy khá tốt thì hãy đến với bài khó hơn nhé: Đây là bài khó hơn: https://lqdoj.edu.vn/problem/upgrade Ở bài này các bạn phải vận dụng thêm là thuật toán Dijkstra và xây 1 đồ thị con để tối ưu Chúc các bạn thành công nhé ❤


  • -5
    nhanphamj  commented on July 11, 2024, 2:56 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -6
    KienHungg  commented on June 6, 2024, 8:37 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 3
    BangLee  commented on May 26, 2024, 4:09 a.m. edit 3

    Bạn nào mà nộp bằng Python3 hay PyPy3 rất có thể sẽ bị lỗi phần nhập input valueError nếu như nhập bình thường, nếu bạn bị lỗi có thể làm theo cách này:

    import sys

    input = sys.stdin.read

    data = input().split() #(chia nhỏ toàn bộ input và nhập vào data)

    n,m = int(data[0]),int(data[1]) #(lúc này trong data[0] và data[1] sẽ tương ứng là n và m)

    index = 2 #(đặt biến index để duyệt những phần nhập số liệu còn lại)

    for _ in range(m):

    u,v = int(data[index]), int(data[index + 1]) #nhập cạnh u,v từ dữ liệu trong data

    index += 2 # nhớ là tăng index sau mỗi lần

    Chúc các bạn k bị lỗi ValueError


    • -2
      messizutaki  commented on Oct. 2, 2024, 6:02 a.m. edited

      cảm ơn nhiều ạ:))


  • -91
    nthquan_1505  commented on March 16, 2023, 9:19 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


    • -48
      yanwe111  commented on March 22, 2023, 3:32 a.m.

      This comment is hidden due to too much negative feedback. Show it anyway.


  • -87
    chubedanye  commented on March 16, 2023, 7:10 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -53
    nthquan_1505  commented on March 15, 2023, 4:50 a.m. edited

    This comment is hidden due to too much negative feedback. Show it anyway.


    • -44
      ducdacoder3103  commented on March 16, 2023, 7:11 a.m.

      This comment is hidden due to too much negative feedback. Show it anyway.


      • -39
        yanwe111  commented on March 22, 2023, 3:32 a.m.

        This comment is hidden due to too much negative feedback. Show it anyway.


    • -45
      chubedanye  commented on March 16, 2023, 7:09 a.m.

      This comment is hidden due to too much negative feedback. Show it anyway.


  • -24
    hoangheovn  commented on March 13, 2023, 8:55 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 18
    21ti_hdhphat  commented on Feb. 13, 2023, 5:07 p.m.

    Nếu bạn bị dính WA 2 test cuối và muốn biết lí do tại sao sai:

    Input có thể cho một đồ thị không liên thông


    • -41
      maintainit  commented on Feb. 22, 2023, 12:40 p.m.

      This comment is hidden due to too much negative feedback. Show it anyway.