Pagini recente » Cod sursa (job #1895912) | Cod sursa (job #473968) | Cod sursa (job #1974218) | Cod sursa (job #2114580) | Cod sursa (job #2181129)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("arbore.in");
ofstream out("arbore.out");
const int Nmax = 100005;
const int Pmax = 1000005;
vector<int> A[Nmax];
void DFS (int nod, vector<int>&tata)
{
for (int i = 0; i < A[nod].size(); i++)
{
int nod_curent = A[nod][i];
if (tata[nod] == nod_curent) continue;
tata[nod_curent] = nod;
DFS(nod_curent, tata);
}
}
void parcurgere (int nod, int suma, vector<int> tata, vector<int>&val, vector<int>&cnt)
{
for (int i = 0; i < A[nod].size(); i++)
{
int nod_curent = A[nod][i];
if (tata[nod] == nod_curent) continue;
if (cnt[val[nod_curent]] == nod_curent)
cnt[val[nod_curent]] = 0;
val[nod_curent] = val[nod_curent] + suma;
if (cnt[val[nod_curent]] == 0)
cnt[val[nod_curent]] = nod_curent;
parcurgere(nod_curent, suma, tata, val, cnt);
}
}
int main()
{
int n, m;
in >> n >> m;
vector<int> tata(n + 1), val(n + 1), cnt(Pmax);
for (int i = 1; i < n; i++)
{
int x, y;
in >> x >> y;
A[x].push_back(y);
A[y].push_back(x);
}
DFS(1, tata);
cnt[0] = 1;
for (int i = 1; i <= m; i++)
{
int tip, p, s;
in >> tip;
if (tip == 1)
{
in >> p >> s;
val[p] = val[p] + s;
cnt[val[p]] = p;
parcurgere(p, s, tata, val, cnt);
}
else
{
in >> s;
if (cnt[s] == 0)
out << -1 << '\n';
else
out << cnt[s] << '\n';
}
}
return 0;
}