zoukankan      html  css  js  c++  java
  • AGC004D Teleporter

    传送门

    题目大意

    有n个城市,每个城市有一个传送点,都可以传送到唯一的另外一个城市,保证从任何位置出发经过若干次传送之后能够到达1号城市。现在希望修改一些点的目的地,使得从任何一点出发在传送K次之后恰好都能到达1号城市,求最少要改变目的地的城市的数量。

    分析

    比较典型的贪心

    从下往上搜索,每当深度为k时就将这整个子树接到1上

    注意1必须连1,所以特判一下即可

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    vector<int>v[100100];
    int n,m,siz[100100],Ans;
    inline void dfs(int x,int fa){
        siz[x]=1;
        for(int i=0;i<v[x].size();i++)
          if(v[x][i]!=fa){
              dfs(v[x][i],x);
              siz[x]=max(siz[x],siz[v[x][i]]+1);
          }
        if(fa!=1&&siz[x]==m)siz[x]=0,Ans++;
    }
    int main(){
        int i,j,k;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++){
          int x;
          scanf("%d",&x);
          if(i==1&&x!=1)Ans=1;
          if(i>1)v[x].push_back(i),v[i].push_back(x);
        }
        for(i=0;i<v[1].size();i++)dfs(v[1][i],1);
        printf("%d
    ",Ans);
        return 0;
    }
  • 相关阅读:
    uoj 36 玛里苟斯
    readlink
    Endless Spin
    rm
    rmdir
    [学习笔记]min-max容斥
    cp
    [HAOI2015]按位或
    java实现第四届蓝桥杯公式求值
    java实现第四届蓝桥杯危险系数
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/10052374.html
Copyright © 2011-2022 走看看