noip 2016 運輸計畫

2021-08-29 01:26:40 字數 2680 閱讀 8430

可以使用樹剖 nlog^2n 卡常後能過 就是碼量有點大

詳解在這裡:

#include#define r register

using namespace std;

const int maxn=3e5+5;

char *p;

void qread()

char get_char()

void readint(int &x)

for(;;)

x*=f;

}struct rmq

void pushdown(int x)

void modify(int ql,int qr,int l,int r,int x,int val)

int m=(l+r)>>1;

pushdown(x);

if(ql<=m)modify(ql,qr,l,m,x<<1,val);

if(mqr)return -1;

if(ql<=l&&r<=qr)return t[x];

int m=(l+r)>>1,ret=-1;

pushdown(x);

if(ql<=m)ret=max(ret,query(ql,qr,l,m,x<<1));

if(mqr)return;

if(ql<=l&&r<=qr)

int m=(l+r)>>1;

pushdown(x,m-l+1,r-m);

if(ql<=m)modify(ql,qr,l,m,x<<1,val);

if(mqr)return 0;

if(ql<=l&&r<=qr)return t[x];

int m=(l+r)>>1,ret=0;

pushdown(x,m-l+1,r-m);

if(ql<=m)ret+=query(ql,qr,l,m,x<<1);

if(mdep[top[v]])swap(u,v);

ret+=t.query(id[top[v]],id[v],1,n,1);

v=fa[top[v]];

}if(dep[u]>dep[v])swap(u,v);

ret+=t.query(id[u]+1,id[v],1,n,1);

return ret;

}int ans,ori;

void go(int u,int v)

if(dep[u]>dep[v])swap(u,v);

while(u!=v)

}vector>chain[maxn];int csz;

void makechain(int u,int v)

if(dep[u]>dep[v])swap(u,v);

int st=id[u]+1,ed=id[v];if(st<=ed)chain[csz].push_back(make_pair(st,ed));

csz++;

}vector>query;

vectorqans;

int mem;

void prepare()

void solve()

ori=ans;

for(r int i=0;i或者使用樹上差分

check函式:check(t)

設路徑長度超過t的路徑的總數為s,如果一條邊被經過恰好s次,且maxlen(最長路徑長度)-edgelen<=t 那麼就可行

(卡常好煩)

#include#define r register

using namespace std;

const int maxn=3e5+5;

char *p;

void qread()

char get_char()

void readint(int &x)

if(ch<'0'||ch>'9');else break;

}for(;;)

x*=f;

}int n,m;

struct edge

edge[maxn<<3];int ec;

int head[maxn];

void addedge(int u,int v,int l)

//--------------------lca

int fa[maxn];

int log[maxn<<3];

int st[21][maxn<<3];

int ord[maxn<<2],ptr,in[maxn],dep[maxn];

void dfs(int x,int f)

}int query(int x,int y)

}sum(root);

int f=0;

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

return f;

}void solve()

else l=m+1;

}printf("%d\n",ans);

}int main()

dfs(root,root);getlen(root,0);bld();

for(int i=0;i<=20;i++)

for(r int i=1,t=0;i<=maxn<<1;i++)

log[i]=t;

}for(r int i=1;i<=m;i++)

prepare();

solve();

return 0;

}

NOIP2016提高A組模擬9 9 運輸妹子

小軒軒是一位非同一般的的大農 lao 場 si 主 ji 他有一大片非同一般的農田,並且坐落在一條公路旁 可以認為是數軸 在他的農田裡種的東西也非同一般 不是什麼水稻小麥,而是妹子。在小軒軒的細心培育下,他的大片農田都要結出妹子啦!但是他的農田分布實在是太廣闊了,他擔心自己的妹子會令路過的人想入非非...

NOIP2016提高A組模擬9 9 運輸妹子

description 小軒軒是一位非同一般的的大農 lao 場 si 主 ji 他有一大片非同一般的農田,並且坐落在一條公路旁 可以認為是數軸 在他的農田裡種的東西也非同一般 不是什麼水稻小麥,而是妹子。在小軒軒的細心培育下,他的大片農田都要結出妹子啦!但是他的農田分布實在是太廣闊了,他擔心自己的...

NOIP2016提高A組模擬9 9 運輸妹子

description 小軒軒是一位非同一般的的大農 lao 場 si 主 ji 他有一大片非同一般的農田,並且坐落在一條公路旁 可以認為是數軸 在他的農田裡種的東西也非同一般 不是什麼水稻小麥,而是妹子。在小軒軒的細心培育下,他的大片農田都要結出妹子啦!但是他的農田分布實在是太廣闊了,他擔心自己的...