考慮鏈上做法,發現就是把每個路徑拆成一次加入和一次刪除,然後從前往後掃,走一步所有路徑經過當前點的時間就要麼加一,要麼減一,且要麼是一直加一,要麼是一直減一,可以用兩個陣列和指標來維護整體加減
用鏈剖把乙個區間轉換成o(log n)個區間,即可在樹上做
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define maxn 300010
#define maxm 1010
#define ll long long
#define eps 1e-8
#define inf 1000000000
#define mod 1000000007
struct vec;
struct data
data(int _s,int _f,int _o)
};int read()
} while(1)
re=re*10+c-'0';
} return re;
}vectorc[maxn];
vec mp[maxn*2];
int tai[maxn],cnt;
int fa[maxn],son[maxn],dep[maxn],siz[maxn],tp[maxn],dfn[maxn],ndf[maxn],tim;
int w[maxn];
int n,m;
int ct1[maxn*4],ct2[maxn*4];
int *ct1=ct1+maxn*2+5,*ct2=ct2+maxn*2+5;
int ans[maxn];
inline void be(int x,int y)
inline void bde(int x,int y)
void dfs1(int x)
} }}void dfs2(int x,int z)
} }}int dis(int x,int y)
re+=dep[y]-dep[x];
return re;
}void change(int x,int y,int dx,int dy)
c[dfn[x]].push_back(data(dy+(dep[y]-dep[x])*fy,fx,1));
c[dfn[y]+1].push_back(data(dy-fy,fx,-1));
}int main(){
int i,j,x,y;
n=read();
m=read();
for(i=1;i
BZOJ4719 Noip2016 天天愛跑步
小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步?是乙個養成類遊戲,需要 玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含 n個結點和n 1 條邊的樹,每條邊連線兩 個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從1到n的連續正整數。現在有個...
NOIP2016 bzoj4719天天愛跑步
小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含 n n個結點和 n 1n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從11到n n的連續正整...
bzoj4719 Noip2016 天天愛跑步
description 小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步?是乙個養成類遊戲,需要 玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含 n個結點和n 1 條邊的樹,每條邊連線兩 個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從1到...