Tuyên bố vấn đề
Cho một số nguyên N đại diện cho số Đỉnh. Nhiệm vụ là tìm số cạnh tối đa có thể có trong đồ thị Bipartite gồm N đỉnh.
Biểu đồ lưỡng cực
- Biểu đồ hai bên là biểu đồ có 2 tập hợp các khe.
- Tập hợp sao cho các đỉnh trong cùng một tập hợp sẽ không bao giờ có chung một cạnh giữa chúng.
Ví dụ
Nếu N =10 thì sẽ có tổng số 25 cạnh -
- Cả hai tập hợp sẽ chứa 5 đỉnh và mọi đỉnh của tập hợp đầu tiên sẽ có một cạnh đối với mọi đỉnh khác của tập hợp thứ hai
- Do đó, tổng số cạnh sẽ là 5 * 5 =25
Thuật toán
- Số cạnh sẽ là lớn nhất khi mọi đỉnh của một tập hợp đã cho đều có cạnh đối với mọi đỉnh khác của tập hợp khác, tức là các cạnh =m * n trong đó m và n là số cạnh trong cả hai tập
- để số cạnh lớn nhất, m phải bằng hoặc gần bằng n nhất có thể
- Do đó, số lượng cạnh tối đa có thể được tính bằng công thức -
(n * n) / 4
Ví dụ
#include <bits/stdc++.h> using namespace std; int getMaxEdges(int n) { return floor((n * n) / 4); } int main() { int n = 7; cout << "Maximum edges = " << getMaxEdges(n) << endl; return 0; }
Đầu ra
Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -
Maximum edges = 12