給出n個點,第i個點座標是(\(x_i, y_i\)),給出m條邊,第i條邊的權值是\(w_i\),求將圖變成一顆樹所需要刪除邊的最小權值和。首先要看出座標其實是出題人使出的障眼法,把人往計算幾何引。看透問題後就知道這是求一顆最大生成樹。
#includeusing namespace std;
const int n = 100005, m = 200005;
int n, m, t;
struct node
};vectoredges;
int anc[n];
typedef long long ll;
ll ans1, ans2;
inline int getanc(int x)
int main()
for(int i = 1; i <= m; i++));
ans1 += 1ll*w;
}sort(edges.begin(), edges.end());
for(int i = 0; i < edges.size(); i++)
}cout << ans2 << " " << ans1 << endl;
}return 0;
}
NOIP模擬題 位運算 生成樹
如約而至。願不辜負。說正事,不要因為寫得很快而沾沾自喜,對拍要快快快一點啊啊啊!然後推的時候要用變數代替樣例資料,同時一定!要自己出資料。還有,一定要在思路理清楚以後認真檢查一次程式的邏輯關係,是否能達到要求,尤其是常數的使用。靜態差錯一!定!要!認真看每一句,清醒一點呀喂!現在腦子不太好使,很容易...
NOIP模擬 MST 類次小生成樹
給一張無向圖,可以將圖中權值為v的邊修改為k v,求修改後的最小生成樹邊權和。最小生成樹的環切定理 任何非樹邊一定比對應樹鏈上的所有邊權值要大。否則我們可以將鏈上最大的樹邊刪去而連線這一條邊。運用這個性質,先求出原圖的最小生成樹,然後再來列舉邊,如果列舉到一條邊 includeusing names...
NOIP模擬 最大化
乙個好像很經典的題目,但是之前沒打過。不過仔細想一想還是很容易的。首先很容易想到把這個表現為矩陣字首和的形式,然後就是要求這個大於0。然後就是乙個很經典的轉換套路了 本來是a k l a i 1 l a k j 1 a i 1 j 1 0 然後移一下項就變成了 a k l a i 1 l a k j...