Cod sursa(job #981375)

Utilizator raulstoinStoin Raul raulstoin Data 6 august 2013 22:18:49
Problema Arbore Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<vector>
#include<set>

#define NMAX 100005

using namespace std;

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

int n,m;
vector<int> G[NMAX],line;
set<int> sums[10*NMAX];
int val[NMAX],first[NMAX],last[NMAX];

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

void DFS(int nod,int tt)
{
	line.push_back(nod);
	first[nod]=line.size()-1;
	for(size_t i=0;i<G[nod].size();i++)
		if(G[nod][i]!=tt)
			DFS(G[nod][i],nod);
	last[nod]=line.size()-1;
}

void solve()
{
	DFS(1,0);
	for(int choice,x,y;m;m--)
	{
		fin>>choice;
		if(choice==1)
		{
			fin>>x>>y;
			for(int i=first[x];i<=last[x];i++)
			{
				sums[val[line[i]]].erase(line[i]);
				sums[val[line[i]]+y].insert(line[i]);
				val[line[i]]+=y;
			}
			continue;
		}
		fin>>x;
		if(sums[x].empty())
			fout<<"-1\n";
		else
			fout<<*(sums[x].begin())<<'\n';
	}
}

int main()
{
	read();
	solve();
	return 0;
}