挖坑記 JZOJ 4727 挺進

2021-07-17 03:42:54 字數 1231 閱讀 1239

一棵樹,求出隨機斷一條邊後,兩個聯通塊直徑和的最大值。

n<=100000,邊長<=100000

時間限制 1s

空間限制 256m

對於樹上每乙個點,預處理出以下資料:

1、每棵子樹的根節點到葉節點的最大值、次大值和第三大值d1,d2,d3;

2、每棵子樹內直徑長度f;

3、每棵子樹的子結點中f[son]的最大值和次大值;

4、這個點與該子樹以外的點的距離dist的最大值;

預處理之後,列舉切斷哪條邊,然後o(1)得出直徑和即可。

#include

#include

#include

#define maxn 200006

#define fr(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

typedef

long

long ll;

struct poi

*a[maxn];

int i,n,x,y,z,fa[maxn];

ll ans,f[maxn],d1[maxn],d2[maxn],d3[maxn],jl[maxn];

ll jl2[maxn],s1[maxn],s2[maxn],di[maxn],anc[maxn];

void link(int x,int y,int z)

void dfs(int x)

else

if (d1[u]+p->y>d2[x])

else

if (d1[u]+p->y>d3[x])

d3[x]=d1[u]+p->y;

if (f[u]>s1[x])

else

if (f[u]>s2[x])

s2[x]=f[u];

f[x]=max(f[x],f[u]);

}f[x]=max(f[x],d1[x]+d2[x]);

return;

}void redfs(int x)

return;

}void dfss(int x)

return;

}int main()

dfs(1);

dfss(1);

redfs(1);

printf("%lld\n",ans);

return

0;}

挖坑記 JZOJ 4707 艾披索特

一條直線上的n個點,其中第i個點位於數軸上的位置x i 如果從i跳到j,首先要花費時間 x j x i 假如i小於j,還需額外花費時間d i a j 如果i j,需額外花費時間c i b j 已經到過的點無法再次到達。每次可以選擇若干個沒有到過的點,然後在其中乙個點開始,按某種順序跳過所有點,最終跳...

挖坑記 JZOJ 4738 神在夏至祭降下了神諭

乙個長度為n的01序列要分段,每一段的0 1個數不能相差k以上,問有多少種分段方案。n 1e5,k n 時間限制 1s 空間限制 256m n 2的dp很容易得出來,在此基礎上優化。b i 表示前1 i個數中0 1個數差,則f i sigma f j b j b i k 建一棵線段樹,表示b i 這...

linux上安裝和使用ffmpeg 挖坑記

小結此處照著網上教程坑略多,務必看完再動手。sudo configure enable shared prefix usr local ffmpeg如果提示yasm版本太舊則安裝一下 sudo apt get install yasm然後再次執行上面的命令即可 ps 這裡僅簡單安裝,configur...