Pagini recente » Cod sursa (job #1444263) | Cod sursa (job #2067508) | Cod sursa (job #1256945) | Cod sursa (job #2223009) | Cod sursa (job #1787984)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("arbore.in");
ofstream g("arbore.out");
int n,m,s,i,c[1000010],cst[100010],p,x,y,t;
vector<int>v[100010],z;
void sterge(int x)
{
int sz=z.size();
for(int k=0;k<sz;k++)
if(z[k]==x)
{
swap(z[k],z[sz-1]);
z.pop_back();
}
}
void DFS(int nod)
{
c[cst[nod]]=0;
cst[nod]+=s;
c[cst[nod]]=nod;
if(cst[nod])
sterge(nod);
int sz=v[nod].size();
for(int k=0; k<sz; k++)
DFS(v[nod][k]);
}
int main()
{
f>>n>>m;
for(i=1; i<n; i++)
{
f>>x>>y;
v[x].push_back(y);
}
for(i=1;i<=n;i++)
z.push_back(i);
for(i=1; i<=m; i++)
{
f>>t;
if(t==1)
{
f>>p>>s;
DFS(p);
}
else
{
f>>s;
if(s)
{
if(c[s])
g<<c[s]<<'\n';
else g<<-1<<'\n';
}
else
g<<z[0]<<'\n';
}
}
}