Pagini recente » Cod sursa (job #1003548) | Cod sursa (job #3352998) | Cod sursa (job #2347871) | Cod sursa (job #1597789) | Cod sursa (job #3340808)
#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;
}