題目
遙想當年初三參加時,想到了二分,想到了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 條雙向航道,每條航道建立在兩個星...