蒟蒻求问代码差别
查看原帖
蒟蒻求问代码差别
902351
Little_x_starTYJ楼主2024/9/4 10:35

my code:

#include <bits/stdc++.h>
using namespace std;

int son[100010], dep[100010], n, k, ans;

void dfs(int u, int fa) {
    int x = son[u];
    if (x > 0) {
        dfs(x, u);
        dep[u] = max(dep[u], dep[x] + 1);
    }
    if (dep[u] == k - 1 && fa > 0 && (son[fa] == x)) {
        ans++;
        dep[u] = -1;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        int u;
        cin >> u;
        son[i] = u;
    }
    ans = (son[1] != 1);
    dfs(1, 0);
    cout << ans;
    return 0;
}

题解:

#include <bits/stdc++.h>
using namespace std;
#define re register
const int maxn=1e5+5;
int n,k,ans;
int head[maxn],to[maxn],nxt[maxn],cnt;
inline void add(int u,int v){
    nxt[++cnt]=head[u];
    to[cnt]=v;
    head[u]=cnt;
}
int a[maxn],dis[maxn];
void dfs(int u,int f){
    for(re int i=head[u];i;i=nxt[i]){
        int v=to[i];
        dfs(v,u);
        dis[u]=max(dis[u],dis[v]+1);
    }
    if(dis[u]==k-1&&f>1&&a[u]^1){
        ans++,dis[u]=-1;
    }
}
signed main() {
#ifdef LawrenceSivan
    freopen("aa.in","r", stdin);
    freopen("aa.out","w", stdout);
#endif  
    cin >> n >> k >> a[1];
    ans+=a[1]!=1;
    for(re int i=2;i<=n;i++){
        cin >> a[i]; 
        add(a[i],i);
    }

    dfs(1,0);

    cout << ans;
    return 0;
}
2024/9/4 10:35
加载中...