Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Gán trọng số cho cạnh sao cho đường đi dài nhất (theo trọng số) được tối thiểu trong C++


Bài toán: cho một cây và tổng S. Gán trọng số cho các cạnh sao cho đường đi dài nhất theo trọng số được tối thiểu. Tổng trọng số gán bằng S.

Cách tiếp cận: tính chất của cây – một đường đi có tối đa 2 nút lá. Gán trọng số chỉ cho cạnh nối nút lá, các cạnh khác gán 0. Mỗi cạnh nối nút lá được gán:

Gán trọng số cho cạnh sao cho đường đi dài nhất (theo trọng số) được tối thiểu trong C++

Vì đường đi chứa tối đa 2 nút lá, đường đi dài nhất sẽ là:

Gán trọng số cho cạnh sao cho đường đi dài nhất (theo trọng số) được tối thiểu trong C++

Ví dụ mã C++

#include <iostream> 
#include <vector> 
using namespace std; 

void insertEdge(int u, int v, vector<int> adj[]) { 
    adj[u].push_back(v); 
    adj[v].push_back(u); 
} 

long double pathLength(vector<int> adj[], int sum, int n) { 
    int count = 0; 
    for (int i = 1; i <= n; i++) { 
        if (adj[i].size() == 1) count++; 
    } 
    long double ans = 2.0 * (long double)(sum / (long double)(count)); 
    return ans; 
} 

int main() { 
    int n = 6; 
    vector<int> adj[n + 1]; 
    insertEdge(1, 2, adj); 
    insertEdge(2, 3, adj); 
    insertEdge(2, 4, adj); 
    insertEdge(4, 5, adj); 
    insertEdge(4, 6, adj); 
    int sum = 1; 
    cout << pathLength(adj, sum, n); 
}

Kết quả

0.5