NOIP 2016天天愛跑步

2022-05-02 04:12:08 字數 2076 閱讀 3159

標籤: lca 樹上差分 noip

小c同學認為跑步非常有趣,於是決定製作一款叫做《天天愛跑步》的遊戲。《天天愛跑步》是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。

這個遊戲的地圖可以看作一棵包含n個結點和n-1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從1到n的連續正整數。

現在有m個玩家,第i個玩家的起點為si,終點為ti。每天打卡任務開始時,所有玩家在第0秒同時從自己的起點出發,以每秒跑一條邊的速度,不間斷地沿著最短路徑向著自己的終點跑去,跑到終點後該玩家就算完成了打卡任務。(由於地圖是一棵樹,所以每個人的路徑是唯一的)

input

第一行有兩個整數n和m。其中n代表樹的結點數量,同時也是觀察員的數量,m代表玩家的數量。

接下來n-1行每行兩個整數u和v,表示結點u到結點v有一條邊。

接下來一行n個整數,其中第j個整數為wj,表示結點j出現觀察員的時間。

接下來m行,每行兩個整數si和ti,表示乙個玩家的起點和終點。

對於所有的資料,保證1≤si,ti≤n,0≤ wj ≤n。

output

輸出1行n個整數,第j個整數表示結點j的觀察員可以觀察到多少人。

sample input

6 32 3

1 21 4

4 54 6

0 2 5 1 2 3

1 51 3

2 6sample output

2 0 0 1 1 1

pic如果你的程式需要用到較大的棧空間(這通常意味著需要較深層數的遞迴),請務必仔細閱讀選手目錄下的文件running/stackpdf,以了解在最終評測時棧空間的限制與在當前工作環境下調整棧空間限制的方法。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rep(i,a,b) for(int i=(a),_end_=(b);i<=_end_;i++)

#define drep(i,a,b) for(int i=(a),_end_=(b);i>=_end_;i--)

#define erep(i,a) for(int i=start[(a)];i;i=e[i].next)

inline int read()

const int maxn=3e5+20;

struct node ;

node e[maxn*2];

int cnt,start[maxn];

int n,m;

void addedge(int u,int v)

; start[u]=cnt;

}int deep[maxn],p[maxn][21];

void dfs(int u,int fa)

}int lca(int u,int v)

struct player ;

player ed[maxn*4];

int st[maxn],cn;

void add(int u,int t,int w,int idx)

; st[u]=cn;

}int a[maxn],b[maxn];

int ans[maxn];

int cnta[maxn*2],cntb[maxn*2];

void dfs1(int u,int fa)

else

}erep(i,u)

int na=cnta[a[u]];

int nb=cntb[b[u]+maxn];

ans[u]+=(na-la)+(nb-lb);

}void init()

deep[1]=1;

dfs(1,0);

rep(i,1,n)

rep(j,1,20)rep(i,1,n)p[i][j]=p[p[i][j-1]][j-1];

rep(i,1,m)

dfs1(1,0);

rep(i,1,n)

cout<}int main()

NOIP2016 天天愛跑步

時間限制 2 s 記憶體限制 512 mb 題目描述 小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一棵包含n個結點和n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。...

NOIP2016天天愛跑步

小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含 nn n個結點和 n 1n 1n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從11 1到nn...

NOIP2016 天天愛跑步

看這道題不爽很久了,但一直沒有開它,原因是我不會 我太菜了 看了題解還是寫不來,因為我不會線段樹合併。然後今天學了dsu on tree這種神奇的科技,成功把它a了,效率吊打線段樹合併。於是寫篇題解紀念一下。洛谷p1600 天天愛跑步 不帶修改的樹上路徑資訊的維護,很容易想到樹上差分。我們考慮一條路...