bzoj4326 NOIP2015 運輸計畫

2021-08-08 02:23:32 字數 1169 閱讀 2932

題目

遙想當年初三參加時,想到了二分,想到了lca,就沒想到如何判斷,然後差20分省一23333.

首先答案顯然滿足二分性質,之後判定答案。

我們把長度超過k的路徑找到,找出它們公共邊中最長的,把它變為0,看是否可行。

如何,找公共邊?樹鏈剖分當然可以,但太複雜了。可以把兩端標記加1,lca標記減2,之後以乙個節點為根的子樹的和,即為這條邊經過了幾次。

#include

#define n 300000

using

namespace

std;

int first[n+1],nex[2*n+1],to[2*n+1],val[2*n+1],siz;

int father[n+1][21],dis[n+1],dep[n+1];

int st[n+1],ed[n+1],length[n+1],lca[n+1];

int cnt[n+1],f[n+1];

int n,m,x,y,z,l,r,mid,mx;

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

int read()

void dfs(int x,int fa,int tmp1,int tmp2)

}void getf(int x,int fa)

}int lca(int x,int y)

bool check(int goal)

}int dec=mx-goal;

memset(f,0,sizeof(f));

getf(1,0);

for(int i=1;i<=n;i++)

if(f[i]==num)

if(dis[i]-dis[father[i][0]]>=dec)return

true;

return

false;

}int main()

l=1,r=~0u>>1;

while(l2;

if(check(mid))r=mid-1;

else l=mid+1;

}for(int i=max(0,l-10);i<=(l+10);i++)

if(check(i))

return

0;}

自己的電腦測官方資料貌似要爆棧,洛谷好像95分,不過bzoj過了233。

bzoj4326 noip 2015 運輸計畫

time limit 30 sec memory limit 128 mb submit 1841 solved 1173 submit status discuss 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航...

bzoj4326 NOIP2015 運輸計畫

題目 大佬的部落格 思路其實很簡單,就是tarjan求lca 二分答案 樹上差分 貌似不需要解釋,看到這個思路就應該基本上會寫了吧 實現起來也聽簡單的 include using namespace std const int n 300003 struct nodee n 1 q n 1 stru...

BZOJ 4326 NOIP2015 運輸計畫

time limit 30 sec memory limit 128 mb submit 1971 solved 1262 submit status discuss description 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n?1 條雙向航道,每條航道建立在兩個星...