DFS特訓 修改天平(UVA12166)方法很巧妙

2021-08-24 20:51:15 字數 690 閱讀 3113

解題思路:題解思路值得借鑑。因為題目要求最小變動的秤砣數量,所以至少有乙個秤砣是不變的。我們可以固定某乙個子秤砣,根據其深度(確定為dfs引數之一)得到整個天平的重量,若其他子秤砣固定求得的天平重量與其相等,則表示固定某乙個秤砣,其餘這些無需變動。因此我們可以求得各個天平重量出現的次數,即定義乙個map與其對映。比較得到最大的出現次數,並用子結點個數減去該次數即為最小變動次數。這題的dfs設計並不容易,注意好好理解

題目描述:給乙個深度不超過16的二叉樹,代表乙個天平。每根杆都懸掛在中間,每個秤砣的重量已知。至少修改多少個秤砣的質量才能讓天平平衡?

3

[[3,7],6]

40[[2,3],[4,5]]

1

03

#include#include#include#include#include#include#includeusing namespace std;

string s;

mapq;

int sum;

void dfs(int depth,int s1,int e1) //深度,遍歷起點與終點

} }else

}int ans=sum-maxsum; //總的子節點數減去總天平重量對映的數量即為需要變動的秤砣數量

cout<} return 0;

}

UVA12166 修改天平

修改天平 time limit 3000msmemory limit 0kb64bit io format lld llu 題意 天平類似乙個二叉樹,要求修改最少的節點使天平平衡,可以利用搜尋來一次遍歷每個結點,如果以此節點重量 w 為準,那麼整棵樹的總重量就是 w depth 只要這個總和相等,即...

UVa 12166 修改天平

題意 給乙個深度不超過16的二叉樹,代表乙個天平。每根杆懸掛在中間,每個秤砣的重量已知,至少修改多少個秤砣的重量才能讓天平平衡?要讓天平平衡,必須以其中乙個秤砣作為標準,然後修改其餘的秤砣。當以深度為d,值為x的葉子節點作為標準時,可以發現此時天平的總質量為x 因此可以遍歷二叉樹的每個葉子節點,在這...

DFS特訓(POJ2816)紅與黑,DFS解法

解題思路 說白了就是一題求連通塊的題目,這裡運用深度優先搜尋,遍歷每乙個合法的位置,每到乙個位置全域性變數ans都會自加1。這裡一定要注意判別條件,越界的陣列和根據題目要求為 的陣列要素直接跳過即可。遍歷完全後列印全域性變數的數值。注意題目中要求尋找起點的要求。總時間限制 1000ms 記憶體限制 ...