C++课后习题训练记录Day145

1.练习项目 :

问题描述

"梅林必须fu"。

在上一个问题中,梅林将芙芙丢进了传送阵,使得芙芙将会在接下来 20 年连续的传送。因此芙芙决定使用自己第 4 兽的能力终止传送从而找到梅林报仇。

魔法师梅林在卡美洛召唤了 N 个传送阵(编号 1∼N),每个传送阵都能传送到另一个编号为 ai​ 的传送阵,保证在一开始时每个传送阵在若干次传送后均可到达 1 号传送阵。

现在芙芙可以修改一些 ai​ 的值,使得它任何一点在传送 k 次后恰好都可以到达 1 号传送阵,求出最少要改变 ai​ 的传送阵数量。

输入格式

第一行输入 2 个正整数 N,k,表示传送阵的数量以及传送次数。

第二行输入 N 个数字,表示第 i 个传送阵可以传送至 ai​ 位置。

输出格式

输出一行一个整数,表示最少要改变 ai​ 的传送阵数量。

2.选择课程

在蓝桥云课中选择题库,选择题号5415并开始练习。

3.开始练习

(1)源码 :

#include<bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 2e5+10;

vector<int>gN;

int indN,dpN;

int n,k;

ll ans=0;

void topu()

{

queue<int>q;

for(int i=1;i<=n;i++)if(!indi)q.push(i);

while(!q.empty()){

int x=q.front();q.pop();

for(const auto&y:gx){

if(y!=1&&dpx==k-1)ans++;

else dpy=max(dpy,dpx+1);

if(--indy==0)q.push(y);

}

}

}

int main()

{

ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

cin>>n>>k;

for(int i=1;i<=n;i++){

int a;cin>>a;

if(i==1&&a!=1){

ans++;

continue;

}

inda++;

gi.push_back(a);

}

topu();

cout<<ans<<'\n';

return 0;

}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法 是否切换 为英语模式;语法是否错误。