Pagini recente » Cod sursa (job #1279789) | Cod sursa (job #990884) | Cod sursa (job #448058) | Cod sursa (job #1840465) | Cod sursa (job #1426745)
#include <fstream>
#include <vector>
using namespace std;
void DFS(int src, bool visited[], int subtreeSum[], vector<int> adjList[]);
int main()
{
int N, i;
ifstream f("asmax.in");
f >> N;
int subtreeSum[N + 1];
for (i = 1; i <= N; i++)
f >> subtreeSum[i];
int x, y;
vector<int> adjList[N + 1];
bool visited[N + 1];
fill(visited + 1, visited + N + 1, false);
while (f >> x >> y)
{
adjList[x].push_back(y);
adjList[y].push_back(x);
}
f.close();
DFS(x, visited, subtreeSum, adjList);
ofstream g("asmax.out");
int maxSum = subtreeSum[1];
for (i = 2; i <= N; i++)
if (subtreeSum[i] > maxSum)
maxSum = subtreeSum[i];
g << maxSum;
g.close();
return 0;
}
void DFS(int src, bool visited[], int subtreeSum[], vector<int> adjList[])
{
visited[src] = true;
for (int i = 0; i < adjList[src].size(); i++)
{
int neighbor = adjList[src][i];
if (!visited[neighbor])
{
DFS(neighbor, visited, subtreeSum, adjList);
if (subtreeSum[neighbor] > 0)
subtreeSum[src] += subtreeSum[neighbor];
}
}
}