Vấn đề 3: bò liên minh [Mark W. Gordon, 2011]Bessie và con bò từ gần các nông trại cuối cùng đã quyết định bắt đầu kết nối nông trại cùng nhau nỗ lực thành lập một liên minh với người nông dân mòn.Ở mỗi một n (1 = 100.000) ban đầu được xây dựng trang trại bò sữa chỉ dẫn đến một đầu mối khác hoàn toàn. Một trang trại, tổng cộng có n đường mòn.Tuy nhiên, vài tháng tới dự án chỉ có m (1 μ m. Những con đường) thực ra đã được xây dựng.Nông trại của cuộc tranh cãi giữa đã tạo ra một mối đe dọa sẽ chia liên minh, bây giờ con bò.Để làm giảm bớt căng thẳng, Bessie ước tính bao nhiêu cách m chung, cho tới nay đã được xây dựng.Ví dụ, nếu có một mối liên kết nông trại 3 và 4, có một khả năng là 3, nông trại xây dựng mối, một khả năng khác là trang trại 4, xây dựng các manh mối.Bessie đi qua con đường khác giúp tính toán số nhiệm vụ xây dựng mô hình trang trại, 1000000007.Hai nhiệm vụ được coi là khác nhau, nếu có ít nhất một nông trại khác nhau ở mọi phân phối bởi một manh mối.Vấn đề tên: Liên minh.Nhập định dạng:* 1 dòng: hai không gian tách một số nguyên n và m.* Line 2. 1 m + 1: tôi giới thiệu và theo dõi.Mỗi dòng có chứa hai số nguyên u_i và v_i (1 ≤ u_i, v_i < = n, u_i!= = = = v_i) được mô tả bởi chung kết nối nông trại với.(mẫu hồ sơ nhập liên minh):5... 4...1. 2.3 24. 54. 5Nhập thông tin chi tiết:Xin hãy chú ý, có thể có hai người trong cùng một trang trại, giữa đường.Định dạng xuất:* 1 dòng: một số nhiệm vụ phân chứa đường một chiềuNông trại, lấy khuôn 1000000007.Nếu không có phân phốiThỏa mãn điều kiện trên, sản lượng 0.Mẫu (tập tin xuất liên minh):6.Đầu ra chi tiết:Có 6 loài được phân phối.- [A, B, C, D} có nghĩa là trang trại 1.Xây dựng theo một trang trại 2 xây dựng theo b, nông trại 3 thiết lập mối C, và nông trại 4.Xây dựng theo D, nhiệm vụ là:[2, 3, 4, 5}[2, 3, 5, 4}{1, 3, 4, 5}{1, 3, 5, 4}{1, 2, 4, 5}{1, 2, 5, 4} Giải phápGiải pháp chú thích (Neal Wu): Hãy nói, một điểm đến bờ vực một đỉnh, nếu đó là người chịu trách nhiệm xây dựng góc cạnh.Chúng tôi muốn biết có bao nhiêu có nhiệm vụ như vậy, mỗi cạnh tới một đỉnh, mỗi đỉnh có nhiều lắm là một nhánh dẫn tới nó.Quan sát đầu tiên của chúng ta là, chúng ta có thể giải quyết vấn đề này một kết nối mọi thành phần, sau đó nhân với câu trả lời, bởi vì các thành phần độc lập.Bây giờ chúng ta giả sử một kết nối với một thành phần có n đỉnh.Chúng ta có 3 loại là trường hợp số cạnh:- nên các thành phần có n - 1 bên.Sau đó nó là một cái cây, chỉ có một đỉnh không có bất cứ Edge vào nó.Tuy nhiên, điều này có thể là bất kỳ đỉnh cao, nhìn thấy cái này, ở đỉnh của cây.Sau đó, mỗi cạnh phải chỉ ra con của nó.Do đó, số lượng bài tập là n.Nên các thành phần có n một bên.Sau đó nó đưa ra một chu kỳ form (ít nhất có hai đỉnh), trong đó mỗi chu kỳ đỉnh là một cây gậy.Trong trường hợp này, một cái cây trong mỗi cạnh phải chỉ ra con của nó, và chu kỳ cạnh có thể hơi theo 2 cách khác nhau - theo chiều kim đồng hồ hay hướng ngược chiều kim đồng hồ.Vì vậy số lượng bài tập là 2.Nên các thành phần có hơn n một bên.Sau đó, câu trả lời là 0, vì ít hơn. Sẽ có nhiều hơn một cạnh vào nó.Tuy nhiên, vì những vấn đề của cuộc thi diễn đạt, Giám đốc quyết định không bao gồm bất kỳ kiểm tra cuối cùng của use case trong bộ dữ liệu.Chúng tôi là giải pháp đơn giản chỉ là một DFS phát hiện và phân loại, mỗi kết nối các thành phần, như vấn đề tác giả · thực hiện dưới đây:# chứa iostream > <# bao gồm cả vector < ># < > bao gồm chuỗi# bao gồm cstdio > <Sử dụng không gian tên;# 1000000007 định nghĩa khuôn.Định nghĩa # máu 100.000Bourg visible [máu];Vector < > E [cái máu];Với cái DFS (> <, cái cái X) {Nếu (visible [X]) trở về make_pair (0, 0);Visible [x] = thật;Cái đúng cái > <, Ret (1, e [x]. Size ());(cái cho i = 0; i < E [x]. Size (); i++) {Cái đúng cái > <, cả cho DFS (E [x] [tôi]);Ret.first + = res.first;Ret.second + = res.second;]Trở về;]Cái Main () {Fprintf ("Alliance", "R", nhập);Fprintf ("Alliance", "w", stdout);Cái n, m;→ → m n viện tư liệu phim;(cái cho i = 0; i < mét; i++) {Cái u, V; → → viện tư liệu phim U V; u, V;E [Anh]. Push_back (V);E [V] push_back (U);]Cái kết quả = 1;(cái cho i = 0; i < n; i++) {Nếu (visible [tôi] | | e [tôi]. Empty ()) tiếp tục;Cái đúng cái > <, cả cho DFS (Tôi);Nếu (res.second% 2) cerr < "vấn đề" < Endl.Res.second / = 2;Nếu (res.first = = res.second + 1) {Kết quả = (111 *. * * * * res.first)% chỉnh sửa;] else if (res.first = = res.second) {Kết quả = (2 * Kết quả) Bộ Quốc phòng;Other []Kết quả = 0;]]Kết quả Cout < < Endl.]
đang được dịch, vui lòng đợi..
