按理來說是乙個非常簡單的樹分治,我只是為了將專題的時候作為一道引入題目的,不過,我擦set和map的常數差別有那麼大嗎,map居然比set慢了10倍,然後就一直t啊一直t最後看他們都用的set改過來就a了,我也是鬱悶。
方法很簡單,用set記錄乙個長度有沒有出現過,然後每次樹分治統計
#include#include#include#include#include#define maxn 30010
#define maxm 1000020
using namespace std;
int head[maxn],tot,dis[maxn],n,m,q[maxn],f[maxn],s[maxn],size,rt,vis[maxn],ans[maxn];
struct edgee[maxn*2];
void adde(int a,int b,int c)
setmap;
void getrt(int u,int fa)
f[u]=max(f[u],size-f[u]);
if(f[u]0||q[i]==0)
puts("yes");else puts("no");
return 0;
}
BZOJ1316 樹上的詢問
給出一棵n個點的帶邊權有根樹 有q個詢問,每個詢問輸入len,判斷在樹上是否存在長度為len的路徑 直接點分治,用set儲存鏈的長度就行了 include include include include include include define maxn 11000 define inf 1 3...
BZOJ 1316 樹上的詢問 點分治
time limit 10 sec memory limit 162 mb submit 691 solved 187 submit status discuss 一棵n個點的帶權有根樹,有p個詢問,每次詢問樹中是否存在一條長度為len的路徑,如果是,輸出yes否輸出no.第一行兩個整數n,p分別表...
BZOJ1316 樹上的詢問 點分治
一棵n個點的帶權有根樹,有p個詢問,每次詢問樹中是否存在一條長度為len的路徑,如果是,輸出yes否輸出no.第一行兩個整數n,p分別表示點的個數和詢問的個數 接下來n 1行每行三個數x,y,c,表示有一條樹邊x y,長度為c 接下來p行每行乙個數len,表示詢問樹中是否存在一條長度為len的路徑 ...