Pagini recente » Clasament dupa rating | Clasament dupa rating | Istoria paginii utilizator/alexandru92 | Istoria paginii utilizator/uwantmyname | Cod sursa (job #726748)
Cod sursa(job #726748)
// http://infoarena.ro/problema/arbore
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXSIZE = 100001;
ifstream in("arbore.in");
ofstream out("arbore.out");
int nodes,ops,sum;
int money[MAXSIZE];
vector<int> graph[MAXSIZE];
void depthFirst(int node);
int main()
{
in >> nodes >> ops;
int from,to;
for(int i=1;i<nodes;i++)
{
in >> from >> to;
graph[from].push_back(to);
}
int type = 0,node = 0;
for(int i=1;i<=ops;i++)
{
in >> type;
if(type == 1)
{
in >> node >> sum;
depthFirst(node);
}
else
{
in >> sum;
bool found = false;
for(int k=1;k<=nodes;k++)
if(money[k] == sum)
{
out << k << "\n";
found = true;
break;
}
if(!found)
out << "-1\n";
}
}
return (0);
}
void depthFirst(int node)
{
money[node] += sum;
for(unsigned int i=0;i<graph[node].size();++i)
depthFirst(graph[node][i]);
}