• [agc004d]Teleporter 暴力


    Description

    维尼管辖的领土很大,我们可以抽象为n个城市,其中1号点为首都。这n个城市之有n条单向电缆,一条信息经过一条电缆进行传输所需时间会+1s,然而维尼并不能忍受时间白白被续,他要求从任何点发出的信息经过恰好ks后恰好出现在首都。
    由于时间紧迫,维尼希望修改的电缆数量尽可能地少,他把这个任务交给了你。

    Input

    第一行两个整数n,k如题目所述
    第二行n个正整数,其中第i个正整数a[i]表示有一条从i出发至a[i]的电缆。
    题目保证在不做修改的情况下从任一点一定可以走到首都

    Output

    一行,一个整数,为修改的电缆条数

    Sample Input

    8 2
    4 1 2 3 1 2 3 4
    

    Sample Output

    3
    

    HINT

    n<100000,k<1e9

    补充样例:

    3 1
    2 3 1
    输出:2
    
    4 2
    1 1 2 2
    输出:0
    

    Sol

    模拟赛的题面。。。懒得改了qwq。

    1连自环。

    剩下的点dfs去寻找深度为k的子树并且找一个ans就++即可。然后删除这个子树。

    Code

    #include <bits/stdc++.h>
    using namespace std;
    vector<int>e[100005];int n,k,a[100005],cnt;
    int dfs(int x,int dep)
    {
        int mx=dep;for(int i=0;i<e[x].size();i++) mx=max(mx,dfs(e[x][i],dep+1));
        if(a[x]!=1&&mx-dep==k-1){cnt++;return 0;}else return mx;
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]),(i!=1)?e[a[i]].push_back(i),0:cnt+=(a[i]!=1);
        for(int i=0;i<e[1].size();i++) dfs(e[1][i],0);
        printf("%d
    ",cnt);
    }
    
  • 相关阅读:
    lua 学习
    IOS表情存入MYSQL数据库失败
    C# string数组转int数组
    打开端口
    win10下设置IIS、安装php7.2
    NET Core 应用程序 IIS 运行报错 502.3-Gateway
    微信小程序(一)--简单的介绍
    C#socket通信
    使用VScode 的插件
    Vue学习笔记:Slot
  • 原文地址:https://www.cnblogs.com/CK6100LGEV2/p/9506856.html
Copyright © 2020-2023  润新知