zoukankan      html  css  js  c++  java
  • 【题解】Luogu P3942 将军令 贪心

    f[x][0] 表示最近控制驿站的距离

    f[x][1]表示最远不能控制的驿站距离

    当f[x][0]+f[x][1]≤k是说明能被控制,但没有贡献

    当f[x][1]=k时,x必须被控制,这时已经到达能控制点的最远距离,如果再向上,x就无法被控制

    正确性:如果x可以向上移动,并且仍然能控制x移动前能控制的点,就把x向上移动,这样不会变差的

    code

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 namespace gengyf{
     4 #define ll long long
     5 const int maxn=1e5+10;
     6 const int inf=1e9+7;
     7 inline int read(){
     8     int x=0,f=1;
     9     char c=getchar();
    10     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    11     while(c>='0'&&c<='9'){x=(x*10)+c-'0';c=getchar();}
    12     return x*f;
    13 }
    14 int n,k,t,ans;
    15 struct edge{
    16     int nxt,to;
    17 }e[maxn*2];
    18 int head[maxn],cnt,f[maxn][2];
    19 inline void add(int from,int to){
    20     e[++cnt].to=to;e[cnt].nxt=head[from];head[from]=cnt;
    21 }
    22 void dfs(int x,int fa){
    23     f[x][0]=inf;f[x][1]=0;
    24     for(int i=head[x];i;i=e[i].nxt){
    25         int y=e[i].to;
    26         if(y==fa)continue;
    27         dfs(y,x);
    28         if(~f[y][1]){
    29             f[x][1]=max(f[x][1],f[y][1]+1);
    30         }
    31         f[x][0]=min(f[x][0],f[y][0]+1);
    32     }
    33     if(f[x][1]==k){
    34         ans++;
    35         f[x][0]=0;f[x][1]=-1;
    36     }
    37     if(f[x][1]+f[x][0]<=k)f[x][1]=-1;
    38 }
    39 int main(){
    40     n=read();k=read();t=read();
    41     for(int i=1;i<n;i++){
    42         int x,y;x=read();y=read();
    43         add(x,y);add(y,x);
    44     }
    45     dfs(1,0);
    46     if(~f[1][1])ans++;
    47     printf("%d",ans);
    48     return 0;
    49 }
    50 }
    51 signed main(){
    52   gengyf::main();
    53   return 0;
    54 }
    View Code
  • 相关阅读:
    OO第一单元总结
    [软件工程]提问回顾与个人总结
    结对项目-最长单词链总结
    [软件工程]第一次阅读作业
    [软件工程] 第0次作业
    提问回顾与个人总结
    结对作业博客
    软工第1次个人作业
    软工第0次个人作业
    OO第四次总结
  • 原文地址:https://www.cnblogs.com/gengyf/p/11598958.html
Copyright © 2011-2022 走看看