51nod1325 兩棵樹的問題

2022-05-08 05:57:09 字數 1304 閱讀 4733

題麵點分治+最小割。

點分必選的重心,再在樹上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 取得最大值,...

兩棵樹的命運

農夫在地里種下了兩粒種子,很快它們變成了兩棵同樣大小的樹苗。第一棵樹開始就決心長成乙個參天大樹,所以它拼命地從地下吸收養料,儲備起來,滋潤每一枝樹幹,盤算著怎樣向上生長,完善自身。由於這個原因,在最初的幾年,它並沒有結果實,這讓農夫很惱火。相反另一棵樹,也拼命地從地下吸取養料,打算早點開花結果,它做...