解題思路:題解思路值得借鑑。因為題目要求最小變動的秤砣數量,所以至少有乙個秤砣是不變的。我們可以固定某乙個子秤砣,根據其深度(確定為dfs引數之一)得到整個天平的重量,若其他子秤砣固定求得的天平重量與其相等,則表示固定某乙個秤砣,其餘這些無需變動。因此我們可以求得各個天平重量出現的次數,即定義乙個map與其對映。比較得到最大的出現次數,並用子結點個數減去該次數即為最小變動次數。這題的dfs設計並不容易,注意好好理解
題目描述:給乙個深度不超過16的二叉樹,代表乙個天平。每根杆都懸掛在中間,每個秤砣的重量已知。至少修改多少個秤砣的質量才能讓天平平衡?
3[[3,7],6]
40[[2,3],[4,5]]
103
#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 記憶體限制 ...