Pagini recente » Cod sursa (job #986997) | Cod sursa (job #1687298)
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
int n,m,v[dim],nr;
int niv[dim],weigh[dim],l[dim],lDim[dim],lPoz[dim];
int aint[4*dim];
vector <int >g[dim],lant[dim];
void citire()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
scanf("%d",&v[i]);
int nod1,nod2;
for (int i=1;i<n;++i)
{
scanf("%d%d",&nod1,&nod2);
g[nod1].push_back(nod2);
g[nod2].push_back(nod1);
}
}
void dfs(int nod,int tata)
{
int frunza=0;
weigh[nod]=1;
for (vector <int > :: iterator it=g[nod].begin();it!=g[nod].end();++it)
{
if (*it==tata)
continue;
niv[*it]=niv[nod]+1;
dfs(*it,nod);
if (weigh[*it]>weigh[frunza])
frunza=*it;
weigh[nod]+=weigh[*it];
}
if (!frunza)
{
l[frunza]=++nr;
lDim[nr]=1;
lant[nr].push_back(nod);
return;
}
l[nod]=l[frunza];
++lDim[l[nod]];
lant[l[nod]].push_back(nod);
for (vector <int > :: iterator it=g[nod].begin();it!=g[nod].end();++it)
{
if (*it==frunza || niv[*it]<niv[nod])
continue;
lTata[l[*it]]=nod;
lNiv[l[*it]]=niv[nod];
}
}
void build(int nod,int st,int dr,int decalaj,int nr_lant)
{
if (left==right)
{
aint[nod+decalaj]=v[lant[nr_lant][st-1]];
return;
}
int mij=(st+dr)/2;
build(2*nod,st,med,decalaj,nr_lant);
build(2*nod+1,med+1,dr,decalaj,nr_lant);
aint[nod+decalaj]=max(aint[2*nod+decalaj],aint[2*nod+1+decalaj]);
}
void facem_drum()
{
niv[1]=1;
dfs(1,0);
for (int i=1;i<=nr;++i)
{
reverse(lant[i].begin(),lant[i].end());
if (i>1)
lPoz[i]=lPoz[i-1]+4*lDim[i-1]*4;
}
}
void solve()
{
int t,x,y,sol;
for (int i=1;i<=m;++i)
{
if (t==0)
{
}
}
}
int main()
{
freopen("heavypath.in","r",stdin);
freopen("heavypath.out","w",stdout);
citire();
facem_drum();
return 0;
}