題麵點分治+最小割。
點分必選的重心,再在樹上dfs判交,轉化為最大權閉合子圖。
可以做\(k\)棵樹的情況。
#include#include#include#include#include#include#include#define rg register
#define il inline
using namespace std;
typedef long long ll;
typedef double dd;
const int n=205;
const int m=20;
const int mod=1e9+7;
const int inf=2147483647;
il ll read()
int n,sum,rt,ans=-inf,val[n],ret;
int head[n],nxt[n<<1],to[n<<1],cnt;
il void add(int u,int v)
int s,t,dhead[n],dnxt[n<<1],dto[n<<1],dval[n<<1],dcnt;
il void addedge(int u,int v,int w)
queueq;int dep[n],cur[n];
il bool bfs()
} }return dep[t];
}int dfs(int u,int t,int power)
} }return 0;
}il int dinic()
return ret;
}int sz[n],w[n],cover[n],tot,pd[n];bool vis[n];
void dfscover(int u,int fa)
}void dfspd(int u,int fa)
}void dfsadd(int u,int fa) }}
il void calc(int u)
void getrt(int u,int fa)
w[u]=max(w[u],sum-sz[u]);
if(w[rt]>w[u])rt=u;
}void solve(int u)
}int main()
{ n=read();
for(rg int i=1;i<=n;i++)val[i]=read();
for(rg int i=1,u,v;i寫最小割的時候,如果使用
addedge(s,u,inf);
來強制重心必選
就會\(wa\)在最後乙個資料點
51 NOD 1325 兩棵樹的問題
對於 100 的資料,n 50.solution 發現n比較小,所以我們可以花o n 2 的代價列舉兩顆樹的聯通塊的lca分別是哪個點,然後現在問題就變成了 選乙個點必須要選它在兩個樹上的祖先,問如何選點可以使收益最大。這是乙個裸的 最大權閉合子圖 問題,節點連s表示選,連t表示不選,如果選x必須選...
樹論 兩棵樹
wc2018 t1 簡化版 by oblack.有兩棵有 n 個節點的樹,分別為 a,b,樹上每條邊都有乙個權值 v i 令 disa x,y 和 disb x,y 分別表示 x 節點與 y 節點在樹 a,b 上的距離 請你找出乙個點對 x,y 使得 disa x,y disb x,y 取得最大值,...
兩棵樹的命運
農夫在地里種下了兩粒種子,很快它們變成了兩棵同樣大小的樹苗。第一棵樹開始就決心長成乙個參天大樹,所以它拼命地從地下吸收養料,儲備起來,滋潤每一枝樹幹,盤算著怎樣向上生長,完善自身。由於這個原因,在最初的幾年,它並沒有結果實,這讓農夫很惱火。相反另一棵樹,也拼命地從地下吸取養料,打算早點開花結果,它做...