Cod sursa(job #1142093)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 13 martie 2014 15:11:12
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bitset>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("painting.in");
ofstream fout("painting.out");

const int MAXN = 100009;

int N, M;
vector < int > G[MAXN];
bitset < MAXN > used;

struct culoare
{
    int cul, ti;
}   v[MAXN];

void initializare()
{
    G[0].push_back(1);

    for (int i = 0; i <= N; ++i)
    {
        v[i].cul = 1;
        v[i].ti = 0;
    }
}

void citire()
{
    fin >> N >> M;
    initializare();

    for (int i = 1; i < N; ++i)
    {
        int x, y;
        fin >> x >> y;
        G[x].push_back(y);
    }

    for (int i = 1; i <= M; ++i)
    {
        int x, y;
        fin >> x >> y;
        v[x].cul = y;
        v[x].ti = i;
    }
}

void DFS(int nod, int tata)
{
    used[nod] = true;
    if ( v[tata].ti > v[nod].ti )
    {
        v[nod].cul = v[tata].cul;
        v[nod].ti = v[tata].ti;
    }

    int L = G[nod].size();
    for (int i = 0; i < L; ++i)
    {
        int fiu = G[nod][i];
        if ( !used[fiu] )
            DFS(fiu, nod);
    }
}

void afisare()
{
    for (int i = 1; i <= N; ++i)
        fout << v[i].cul << " ";
}

int main ()
{
    citire();
    DFS(1, 0);
    afisare();

    fin.close();
    fout.close();

    return 0;
}