加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

P3942 将军令

发布时间:2020-12-16 10:49:00 所属栏目:百科 来源:网络整理
导读:自己造的一组hack数据打错一个数字,自闭—— 凸(艹皿艹 ) 本质是一个贪心,策略是建边,以任意底为根,排最深的点再贪它。 预处理深度,遍历顺序。寻找覆盖最远的点,自下向上不到必须不选,子树向上覆盖。 ? 1 #includebits/stdc++.h 2 using namespace st

自己造的一组hack数据打错一个数字,自闭—— 凸(艹皿艹 )

本质是一个贪心,策略是建边,以任意底为根,排最深的点再贪它。

预处理深度,遍历顺序。寻找覆盖最远的点,自下向上不到必须不选,子树向上覆盖。

?

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int read(){
 4     int a=1,b=0;char t;
 5     while(t<0||t>9){
 6         if(t==-) a=-1;
 7         t=getchar();
 8     }
 9     while(t>=0&&t<=9) b=b*10+t-0,t=getchar();
10     return a*b;
11 }
12 #define maxn 100010
13 #define F(i,a,b) for(int i=a;i<=b;i++)
14 
15 int n,k,ans,tot;
16 /*
17 struct edge{
18     int to,nxt;
19 }ea[maxn];
20 
21 int dfs(int u,int fa){
22     int v,minm=0,maxm=0;
23     for(int i=head[u];i;i=ea[i].nxt){
24         v=dfs(ea[i].to,u);
25         if(ea[i].to!=fa){
26             if(v<0) minm=min(minm,v);
27             else maxm=max(maxm,v);
28         }
29     }
30     if(maxm>-minm) return maxm-1;
31     if(-minm==k||u==1) return ++ans,k;
32     return minm-1;
33 }*/
34 struct edge{
35     int v;
36     edge *nxt;
37 } pool[maxn<<1],*tp=pool,*head[maxn];
38 int dfs(int x,int fa){
39     int t,mn=0,mx=0;
40     for (edge *i=head[x];i;i=i->nxt)
41         if (i->v!=fa)
42             (t=dfs(i->v,x))<0? mn=min(mn,t):mx=max(mx,t);
43     if(mx>-mn) return mx-1;
44     if(-mn==k||x==1) return ++ans,k;
45     return mn-1;
46 }
47 int main(){
48     n=read(),k=read(),read();
49     F(i,1,n-1){
50         int u=read(),v=read();/*
51         ea[++tot].nxt=head[u],head[u]=tot,ea[tot].to=v;
52         ea[++tot].nxt=head[v],head[v]=tot,ea[tot].to=u;*/
53         *tp=(edge){v,head[u]},head[u]=tp++;
54         *tp=(edge){u,head[v]},head[v]=tp++;
55     }
56     dfs(1,0);
57     cout<<ans;
58 }
View Code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读