zoukankan      html  css  js  c++  java
  • [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);
    }
    
  • 相关阅读:
    表格边框
    vue路由守卫
    移动端专用css
    原生js写的的浏览器历史记录
    有趣
    表格边框
    路由
    php安装
    curl
    case when
  • 原文地址:https://www.cnblogs.com/CK6100LGEV2/p/9506856.html
Copyright © 2011-2022 走看看