貪心解決。
這種考慮前後順序的題目的常見做法是前後比較將優先順序排序,再用並查集輔助合併。
善用stl:
如果要維護乙個堆的話,可以用set,最方便,stl的heap太麻煩,優先佇列可能被卡。
注意,set中如果自定義了比較函式(還是比較複雜的那種,如本題的貪心),那麼set.find()
很有可能re(不是找不到而是卡死),直接erase就行,find還是不要用了,如果要用multiset就自求多福吧
accode:
#include#include#include#include#include#define maxn 30005
#define ll long long
using namespace std;
int n;
int prev[maxn*2],to[maxn*2],cnt_e,info[maxn],fa[maxn];
int rt[maxn],f[maxn],wn[maxn];
int find(int now)
inline void node(int u,int v)
inline void get(int &res)
inline void get(ll &res)
struct node
}a[maxn];
setst;
set::iterator it;
void dfs(int now,int ff)
int main(){
freopen("xmastree2.in","r",stdin);
freopen("xmastree2.out","w",stdout);
int u,v;
scanf("%d",&n);
for(int i=1;i
WC模擬(1 8) T3 送你一朵聖誕樹
送你一朵聖誕樹 題目背景 1.8 wc 模擬t3 分析 並查集 堆 貪心 對於全域性最小的那個點,選擇了它的父親之後,就一定會選擇它,所以我們直接合併它和它的父親,那麼對於乙個點集 i,記錄 ti為點集中的點的個數,si為點集中的點的權值和,那麼,對於兩個點集,如果點集 i優於點集 j,那麼 ti ...
JZOJ 4211 送你一棵聖誕樹
有n 1 顆樹,編號為t0 tn 對於每一棵樹ti,他在第ta i 棵樹的第ci 個點和第tb i 棵樹的第di 個點之間連上了一條長度為le ni的邊。在ti 中,他保持ta i 中的所有節點編號不變,把tb i 中的所有節點的編號加上si zeai 我們定義一棵樹的美觀度為兩兩點之間的距離之和,...
清華冬令營2018模擬 送你一棵聖誕樹
對於每個詢問輸出一行乙個整數,表示答案.5 5 0 5 5 2 5 5 5 1 2 5 4 2 3 5 1 2 2 3 2 5 1 1 1 1 5 2 3 2 1 3 1 5 0 3 15 5 1 4 1 1 5 4 5 1 3 5 2 3 4 3 2 5 4 2 2 2 1 3 1 5 2 1 2...