Just__Joker 2021-10-31 18:29 采纳率: 0%
浏览 61
已结题

有人能分析一下这段50行的代码吗?

具体各个函数的作用,各个数组的作用,提供代码和题目

img

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

const int N = 1E5+5,M = 2E5+10;
int h[N],ne[M],e[M],mark[N];
int n,m,idx;

void add(int a,int b)
{
     e[idx]=b;
     ne[idx]=h[a];
     h[a]=idx++;
}

int dfs(int u,int fa)
{
    int sum=0;
    for(int i=h[u];~i;i=ne[i])
    {
        int j=e[i];
        if(j==fa) continue; 
        int t=dfs(j,u);
        if(t>0)
           sum+=t+2;
        else if(mark[j]>0)
           sum+=2;
    }
    return sum;
}


int main()
{
    int a,b,y;
    memset(h,-1,sizeof(h));   //初始化h数组都为-1 
    cin>>n>>m; 
    for(int i=1;i<=n-1;i++)
    {
        cin>>a>>b;
        add(a,b);
        add(b,a);
    }
    for(int i=1;i<=m;i++)
    {
        cin>>y;
        mark[y]++;
    }
    printf("%d",dfs(1,-1));
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-11-02 10:11
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 创建了问题 10月31日