一棵n個點的帶權有根樹,有p個詢問,每次詢問樹中是否存在一條長度為len的路徑,如果是,輸出yes否輸出no.
第一行兩個整數n, p分別表示點的個數和詢問的個數.
接下來n-1行每行三個數x, y, c,表示有一條樹邊x→y,長度為c.
接下來p行每行乙個數len,表示詢問樹中是否存在一條長度為len的路徑.
輸出有p行,yes或no.
6 41 2 5
1 3 7
1 4 1
3 5 2
3 6 3
yesyes
noyes
30%的資料,n≤100.
100%的資料,n≤10000,p≤100,長度≤1000000.
ps:洛谷輸出稍有不同。
因為詢問規模略小,直接點分的時候針對每個詢問更新一遍。
在吐槽一下set的常數。。。大家可以不開o2去洛谷上跑一跑= =
#includeusing namespace std;
#define ll long long
const int maxn=10005;
struct edge
}e;struct cmp
inline void work(int x)
for(int i=1;i<=q[0];++i)s.insert(q[i]);
} for(int i=1;i<=m;++i)
if(*s.lower_bound(query[i])==query[i])ans[i]=1;
}inline void getroot(int x,int fa,int &mn,int &root,int totsiz)
maxsiz=max(maxsiz,totsiz-tmpsiz[x]);
if(maxsiz}inline void divide(int x,int totsiz)
int main()
for(int i=1;i<=m;++i)scanf("%lld",&query[i]);
divide(1,n);
for(int i=1;i<=m;++i)ans[i]||!query[i]?puts("yes"):puts("no");//這個特判是針對學校的oj的= =
return 0;
}
洛谷 P1113 雜務
一看見有序我們就想到了dag圖,於是用topsort做,對於每乙個加入佇列的頂點,都用它的時間去更新它所指向的點的時間,本質上仍是dp的思想,dp i max ti i j i include include include include include include include using...
洛谷 P1113 雜務 vector
本題說有些雜務是有前提條件的,而有乙個特性就是某個雜務的前提一定在這個雜務前面輸入,那麼,這個題就瞬間淪為了黃題.對於那些有前提條件的雜務,我們只需要找它的前提條件中最晚完成的那個加上自己的時間就是這個雜務最早完成的時間.再在全部雜務中找最晚的那個,就是答案.1 include2 include3 ...
洛谷 P3806 模板 點分治1
this way 點分治模板 點分治解決的好像大部分是樹上路徑問題 網上模板有很多,我就不贅述了,大致思想就是找到樹的重心,然後o n 地求出路徑經過這個點的所有情況,之後再將樹以這個重心為基準分成多個子樹,再找到他們的重心,如此分治的去做。網上的 各不相同,我找了同集訓隊的人的寫法,用set維護每...