#40824: DFS


glps1004@gmail.com (Ian)

學校 : 不指定學校
編號 : 272041
來源 : [101.9.186.158]
最後登入時間 :
2024-07-20 16:07:05
h029. 202001_4 貨物分配 -- 2020年1月APCS | From: [101.9.189.43] | 發表日期 : 2024-06-14 17:06

#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define M 105
vector<int> child[N];
int number;
int box[N]={0};
int bfs(int v)
{
    for(int e:child[v])
    {
        box[v]+=bfs(e);
    }
    return box[v];
}
void findb(int v,int w)
{
    if(child[v].size()==0) return;
    int num1=child[v][0],num2=child[v][1];
    if(box[num1]<=box[num2])
    {
        box[num1]+=w;
        number=num1;
        findb(num1,w);
    }
    else
    {
        box[num2]+=w;
        number=num2;
        findb(num2,w);
    }
    return;
}
int main()
{
    int n,m,p,s,t;
    int weight[M];
    scanf("%d%d",&n,&m);
    for(int i=n; i<2*n; i++) scanf("%d",box+i);
    for(int i=0; i<m; i++) scanf("%d",weight+i);
    for(int i=0; i<n-1; i++)
    {
        scanf("%d%d%d",&p,&s,&t);
        child[p].push_back(s),child[p].push_back(t);
    }
    bfs(1);
    for(int i=0; i<m; i++)
    {
        findb(1,weight[i]);
        printf("%d ",number);
    }
}

 
ZeroJudge Forum