Pagini recente » Cod sursa (job #1672881) | Cod sursa (job #1562499) | Cod sursa (job #1765999) | Cod sursa (job #2906264) | Cod sursa (job #2399677)
#include<fstream>
#include<vector>
#include<cmath>
#define DIN 100000
#define DIM 200000
#define DIMQ 450
using namespace std;
ifstream fin("arbore.in");
ofstream fout("arbore.out");
vector<int> v[DIN];
int l[DIM],st[DIMQ],dr[DIMQ],pp[DIM],e[DIN],b[DIN],ad[DIMQ][DIMQ],f[DIMQ][10000],valu[DIMQ];
int n,k,q,i,a,bb,lim,poz,loc,t,nod,c,en,start,ok,j;
void dfs(int nod, int tata)
{
l[++k]=nod;b[nod]=k;
for(auto it:v[nod])
if(it!=tata) dfs(it,nod);
l[++k]=nod;e[nod]=k;
}
int main()
{
fin>>n>>q;
for(i=1;i<n;i++)
{
fin>>a>>bb;
v[a].push_back(bb);v[bb].push_back(a);
}dfs(1,0);
lim=sqrt(k);poz=0;loc=1;
for(i=1;i<=k;i++)
{
if(poz==0) st[loc]=i;
pp[i]=loc;
poz++;ad[loc][poz]=0;f[loc][ad[loc][poz]]++;
if(poz==lim){dr[loc]=i;loc++;poz=0;}
}
for(;q--;)
{
fin>>t;
if(t==1)
{
fin>>nod>>c;
start=b[nod];en=e[nod];
for(i=start;i<=en;i++)
{
if(st[pp[i]]>=start&&dr[pp[i]]<=en) valu[pp[i]]+=c,i=dr[pp[i]];
else
{
f[pp[i]][ad[pp[i]][i-st[pp[i]]+1]]--;
ad[pp[i]][i-st[pp[i]]+1]+=c;
f[pp[i]][ad[pp[i]][i-st[pp[i]]+1]]++;
}
}
}
else
{
fin>>c;ok=1;
for(i=pp[1];i<=pp[n]&&ok;i++)
{
if(f[i][c-valu[i]])
for(j=1;j<=lim;j++)
if(ad[i][j]+valu[i]==c)
{
fout<<l[j+st[i]-1]<<"\n";
ok=0;
break;
}
}
if(ok==1) fout<<"-1\n";
}
}
return 0;
}