Pagini recente » Cod sursa (job #595321) | Cod sursa (job #130753) | Cod sursa (job #2250660) | Cod sursa (job #573400) | Cod sursa (job #2830393)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream o("asmax.out");
class Graph
{
vector<vector<int>> adjList;
vector<bool> vis;
int size, maxVal = -2147483648;
public:
vector<int> valori;
Graph(int n)
{
size = n;
adjList.resize(size+1);
valori.resize(size+1);
for (int i = 0; i < size+1; i++)
vis.push_back(false);
}
void addEdge(int start, int end)
{
adjList[start].push_back(end);
adjList[end].push_back(start);
}
int DFS(int node)
{
vis[node] = true;
for (auto i : adjList[node])
if (!vis[i])
{
DFS(i);
if (valori[i] > 0)
valori[node] += valori[i];
}
if (valori[node] > maxVal)
maxVal = valori[node];
return maxVal;
}
};
int main()
{
int N, x, y;
f >> N;
Graph g(N);
for (int i = 1; i <= N; i++)
{
f>>g.valori[i];
}
for (int i = 0; i < N; i++)
{
f >> x >> y;
g.addEdge(x, y);
}
o<<g.DFS(1);
}