Pagini recente » Cod sursa (job #1338826) | Cod sursa (job #2903299) | Cod sursa (job #3196478) | Cod sursa (job #2246897) | Cod sursa (job #29297)
Cod sursa(job #29297)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int *v,**fii,*nfii,sum;
void pay(int x){
v[x]+=sum;
for (int i=0;i<nfii[x];++i)
pay(fii[x][i]);
}
int search(int x){
int i,a;
for (i=0;i<nfii[x];++i)
if (v[fii[x][i]]==sum) return fii[x][i];
for (i=0;i<nfii[x];++i){
if (v[fii[x][i]]<sum){
a=search(fii[x][i]);
if (a)
return a;
}
}
return 0;
}
int main (){
int n,m,i,p,q,tip,a;
freopen("arbore.in","r",stdin);
freopen("arbore.out","w",stdout);
scanf("%d %d",&n,&m);
fii=(int **)malloc(sizeof(int *) * (n+1));
v=(int *)malloc(sizeof(int) * (n+1));
nfii=(int *)malloc(sizeof(int) * (n+1));
memset(fii,0,sizeof(fii[0])*(n+1));
memset(nfii,0,sizeof(nfii[0])*(n+1));
memset(v,0,sizeof(v[0])*(n+1));
for (i=1;i<n;++i){
scanf("%d %d",&p,&q);
if (!fii[p]){
fii[p]=(int *)malloc(sizeof(int));
nfii[p]=1;
}
else realloc(fii[p],++nfii[p]*sizeof(fii[0][0]));
fii[p][nfii[p]-1]=q;
}
for (i=1;i<=m;++i){
scanf("%d",&tip);
if (tip==1){
scanf("%d %d",&p,&sum);
pay(p);
}
else{
scanf("%d",&sum);
if (v[1]==sum) printf("1\n");
else
if (v[1]>sum) printf("-1\n");
else{
a=search(1);
if (a) printf("%d\n",a);
else printf("-1\n");
}
}
}
return 0;
}