Cod sursa(job #3340808)

Utilizator Iancu007Sandea Iancu-Ioan Iancu007 Data 16 februarie 2026 15:34:32
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("asmin.in");
ofstream fout("asmin.out");
vector<int> g[16005];
int v[16005], v2[16005];
bool f[16005];
int c[16005];
queue<int> q;
int main()
{
    int n, k;
    fin>>n>>k;
    int a, b;
    for (int i=1; i<=n-1; i++)
    {
        fin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    for (int i=1; i<=n; i++)
        fin>>v[i];
    q.push(1);
    v2[1]=v[1];
    c[1]=v[1];
    while (!q.empty())
    {
        a=q.front();
        q.pop();
        if (!f[a])
        {
            f[a]=1;
            for (int j=0; j<g[a].size(); j++)
            {
                if (!f[g[a][j]])
                {
                    v2[g[a][j]]=(k+v[g[a][j]]-v[a])%k;
                    q.push(g[a][j]);
                    c[1]+=v2[g[a][j]];
                }
            }
        }
    }
    q.push(1);
    for (int j=1; j<=n; j++)
        f[j]=0;
    while (!q.empty())
    {
        a=q.front();
        q.pop();
        if (!f[a])
        {
            f[a]=1;
            for (int i=0; i<g[a].size(); i++)
            {
                if (!f[g[a][i]])
                {
                    if (v[a]==v[g[a][i]])
                        c[g[a][i]]=c[a];
                    if (v[a]>v[g[a][i]])
                        c[g[a][i]]=c[a]-k-v[g[a][i]]+v[a];
                    if (v[a]<v[g[a][i]])
                        c[g[a][i]]=c[a]-v[g[a][i]]+v[a]+k;
                    q.push(g[a][i]);
                }
            }
        }
    }
    /*fout<<"V2 de "<<1<<":\n";
    for (int j=1; j<=n; j++)
        fout<<v2[j]<<' ';
    fout<<'\n';
    for (int i=1; i<=n; i++)
    fout<<c[i]<<' ';
    fout<<'\n';*/
    int minn=c[1];
    int cnt=0;
    for (int i=1; i<=n; i++)
        if (minn>c[i])
        {
            cnt=1;
            minn=c[i];
        }
        else if (minn==c[i])
            cnt++;
    fout<<minn<<' '<<cnt<<'\n';
    for (int i=1; i<=n; i++)
        if (minn==c[i])
            fout<<i<<' ';
    return 0;
}