Pagini recente » Cod sursa (job #762444) | Cod sursa (job #91728) | Cod sursa (job #2140145) | Cod sursa (job #1351240) | Cod sursa (job #3281008)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int a[16002], n, dint[16002], sum1, sum2, neg[15002], p;
bool viz[16002];
vector<int> L[16002];
int DFS(int k)
{
viz[k] = 1;
sum1 += a[k];
for(int i: L[k])
if(!viz[i]) DFS(i);
}
void Reset()
{
for(int i = 1; i <= n; i++)
viz[i] = 0;
}
int main()
{
int i, j, s = 0;
fin >> n;
for(i = 1; i <= n; i++)
{
fin >> a[i];
s += a[i];
}
while(fin >> i >> j)
{
L[i].push_back(j);
L[j].push_back(i);
dint[i]++; dint[j]++;
}
for(i = 1; i <= n; i++)
if(a[i] < 0)
{
if(dint[i] == 1) a[i] = 0;
else neg[++p] = i;
}
for(i = 1; i <= n; i++)
if(dint[i] != 1)
{
for(j = 1; j <= p; j++)
{
sum1 = 0;
viz[j] = 1;
DFS(i);
Reset();
s = max(s,sum1);
}
}
fout << s;
return 0;
}