自闭的D7

先是一道**题然后我死了啊。

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  */
View Code

E:

哇怎么是个人都会啊...好像自从我拿到衣服之后就开始疯狂降智了,,,不过这几天同步赛神仙变多了...话说我的T恤为什么还没来?

我觉得好难啊...看的别人的题解

https://blog.csdn.net/CaprYang/article/details/86659607

这个我觉得还是很好理解的...主要是代码可读性很强啊...雾

要记住是 从set里被删除才算一次插入才会标记,所以不能用pq,当然也有用优先队列的,,,还没看懂就是了...

F:哇我听课听了些卜啊,今晚再补叭

J:我不配与你们同台竞技,我退役了.哇这谁顶得住啊自闭了,不会。

原文地址:https://www.cnblogs.com/MXang/p/10326056.html