bzoj1316 樹上的詢問 點分治 set

2021-09-11 17:35:33 字數 1119 閱讀 5956

【bzoj1316】【樹上的詢問】點分治+set

description

一棵n個點的帶權有根樹,有p個詢問,每次詢問樹中是否存在一條長度為len的路徑,如果是,輸出yes否輸出no.

input

第一行兩個整數n, p分別表示點的個數和詢問的個數. 接下來n-1行每行三個數x, y, c,表示有一條樹邊x→y,長度為c. 接下來p行每行乙個數len,表示詢問樹中是否存在一條長度為len的路徑.

output

輸出有p行,yes或no.

sample input

6 4 

1 2 5 

1 3 7 

1 4 1 

3 5 2 

3 6 3 

1 8 

13 14 

sample output

yes 

yes 

no yes 

hint

30%的資料,n≤100. 

100%的資料,n≤10000,p≤100,長度≤1000000. 

#includeusing namespace std;

struct node;

setres;

vectorg[10005];

node e;

int v[10005],n,m,sim[10005],mos[10005],mx=0x3f3f3f3f,root,a,b,w,dis[10005];

void getroot(int u,int fa)

}//找到乙個根

void getans(int u,int fa,int d,setans)

coutfor(set::iterator it=ans.begin();it!=ans.end();it++)

}} }

}int main()

getroot(1,0);

memset(v,0,sizeof(v));

divide(root,0);//初始化完畢,開始進行輸出

cout<>a;

if(res.count(a)) cout<<"yes"

}

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的路徑 ...

BZOJ1316 樹上的詢問 點分治

time limit 10 sec memory limit 162 mb submit 1017 solved 287 submit status discuss 一棵n個點的帶權有根樹,有p個詢問,每次詢問樹中是否存在一條長度為len的路徑,如果是,輸出yes否輸出no.第一行兩個整數n,p分別...