Pagini recente » Cod sursa (job #2134917) | Cod sursa (job #969609) | Istoria paginii runda/the_wild_west/clasament | Cod sursa (job #1509699) | Cod sursa (job #981399)
Cod sursa(job #981399)
#include<fstream>
#include<vector>
#include<cstring>
#define NMAX 100005
using namespace std;
ifstream fin("arbore.in");
ofstream fout("arbore.out");
int n,m;
vector<int> G[NMAX],line;
int val[NMAX],first[NMAX],last[NMAX];
//
const int SZ=10000;
char input[SZ+1],*in;
int atoi()
{
int nr =0;
for(;!(*in>='0' && *in<='9') && *in;in++);
if(!*in)
{
memset(input,0,sizeof input);
fin.read(input,SZ);
in=input;
for(;!(*in>='0' && *in<='9') && *in;in++);
}
for(;*in>='0' && *in<='9';in++)
{
nr=nr*10+(*in-'0');
if(!*(in+1))
{
memset(input,0,sizeof input);
fin.read(input,SZ);
in=input-1;
}
}
return nr;
}
//
void read()
{
fin.read(input,SZ);
in=input;
n=atoi();
m=atoi();
for(int i=1,x,y;i<n;i++)
{
x=atoi();
y=atoi();
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);
line.push_back(nod);
last[nod]=line.size()-1;
}
void solve()
{
DFS(1,0);
for(int i,aux,choice,x,y;m;m--)
{
choice=atoi();
x=atoi();
if(choice==1)
{
y=atoi();
val[x]+=y;
continue;
}
for(i=0,aux=0;i<2*n;i++)
{
if(first[line[i]]==i)
{
aux+=val[line[i]];
if(aux>x)
i=last[line[i]];
}
if(last[line[i]]==i)
aux-=val[line[i]];
if(aux==x)
break;
}
if(i==2*n)
fout<<"-1\n";
else
fout<<line[i]<<'\n';
}
}
int main()
{
read();
solve();
return 0;
}