Cod sursa(job #1687298)

Utilizator zertixMaradin Octavian zertix Data 12 aprilie 2016 19:35:40
Problema Heavy Path Decomposition Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.05 kb
#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;
}