Cod sursa(job #1295048)

Utilizator otnielMercea Otniel otniel Data 18 decembrie 2014 18:37:33
Problema Asmax Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<iostream>
using namespace std;
#include<stdio.h>
FILE *f,*g;
int suma=-9999999999,n,i,j,val[16002],s[16002],m,n1;
struct nod
{
    int nd;
    nod *urm;
};
nod *l[16002],*p;
int df(int q,int w)
{
   s[q]=1;
   while(l[q])
   {
       if(s[l[q]->nd]==0)
       {
      df(l[q]->nd,q);
      }
      l[q]=l[q]->urm;
   }
     if(w!=q)
     {
         if(val[w]<0&&val[q]>0&&val[w]+val[q]>=0)
            val[w]=val[q]+val[w];
         else
         if(val[w]+val[q]>0)
            val[w]=val[q]+val[w];
     }
}
int main()
{
    f=fopen("asmax.in","r");
    g=fopen("asmax.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&val[i]);
    }
    while(!feof(f))
    {
        fscanf(f,"%d%d",&i,&j);
        if(i!=m||j!=n1)
        {
        p=new nod;
        p->urm=l[i];
        p->nd=j;
        l[i]=p;
        p=new nod;
        p->urm=l[j];
        p->nd=i;
        l[j]=p;
        }
        m=i;n1=j;
    }
    m=n;
    df(1,1);
    for(i=1;i<=n;i++)
        if(val[i]>suma)
            suma=val[i];
        fprintf(g,"%d",suma);
}