标签:怎么 with clu span article vector end opened ons
先是一道**题然后我死了啊。
A:
哇人人都会我不会系列。 我们可以运用逆向思维啊,把它转化成若干个人从点1进来, 然后我们考虑深度 dep,用 num[dep] 表示深度大于等于这个点的有多少个,
这样子我们会发现 对于每一个 dep,答案就是 dep+num[dep]-1,因为第一个走过来需要dep步,后面每一个1步就够了,答案就是所有dep取max。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1e5+5; 4 int a[N],n,x,y; 5 vector<int>g[N]; 6 int f[N],dep[N]; 7 void dfs(int v,int fa,int d){ 8 dep[v] = d; 9 for(auto u:g[v]){ 10 if(u==fa) 11 continue; 12 dfs(u,v,d+1); 13 } 14 } 15 int main(){ 16 ios::sync_with_stdio(false); 17 cin>>n; 18 for(int i=1;i<=n;i++) cin>>a[i]; 19 for(int i=1;i<n;i++){ 20 cin>>x>>y; 21 g[x].push_back(y); 22 g[y].push_back(x); 23 } 24 dfs(1,1,0); 25 for(int i=1;i<=n;i++){ 26 if(a[i]) 27 f[dep[i]]++; 28 } 29 for(int i=n;i>=1;i--){ 30 f[i]+=f[i+1]; 31 } 32 int mx = 0; 33 for(int i=1;i<=n;i++) { 34 if(a[i]) 35 mx = max(f[dep[i]]+dep[i]-1,mx); 36 } 37 cout<<mx<<endl; 38 } 39 /** 40 5 41 0 1 0 1 0 42 1 2 43 1 3 44 3 4 45 4 5 46 */
E:
哇怎么是个人都会啊...好像自从我拿到衣服之后就开始疯狂降智了,,,不过这几天同步赛神仙变多了...话说我的T恤为什么还没来?
我觉得好难啊...看的别人的题解
https://blog.csdn.net/CaprYang/article/details/86659607
这个我觉得还是很好理解的...主要是代码可读性很强啊...雾
要记住是 从set里被删除才算一次插入才会标记,所以不能用pq,当然也有用优先队列的,,,还没看懂就是了...
F:哇我听课听了些卜啊,今晚再补叭
J:我不配与你们同台竞技,我退役了.哇这谁顶得住啊自闭了,不会。
标签:怎么 with clu span article vector end opened ons
原文地址:https://www.cnblogs.com/MXang/p/10326056.html