Cod sursa(job #2152733)

Utilizator alexandra.ioana.popaPopa Alexandra-Ioana alexandra.ioana.popa Data 5 martie 2018 19:22:28
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

struct nod {

    int vec;
    int c;
    nod* urm;
};

typedef nod* LSI;

int n, m, start;
int T;
int d[50010];
LSI L[50010];
void inserare(LSI& L,int x, int y, nod* p);

void citire();
void initializare(int n);
bool verificare();

int main()
{
    citire();
    return 0;
}


void citire()
{int T, ok;
    int i, j, x, y, cost;
    fin>>T;
    for(i=1; i<=T; i++)
        {
        fin>>n>>m>>start;
        initializare(n);
        for(j=1; j<=n; j++)
            //citim distantele d
            fin>>d[j];
        for(j=1; j<=m; ++j)
            { //acum muchiile
            fin>>x>>y>>cost;
            inserare(L[x], y, cost, NULL);
            inserare(L[y], x, cost, NULL);
            }
        ok=verificare();
        if (ok==0)
            fout<<"NU"<<'\n';
            else
            fout<<"DA"<<'\n';
        }
}

void initializare(int n)
{
    int i;
    for(i=1; i<=n; i++)
        L[i]=NULL;
}

bool verificare()
{
    int i;
    nod *p;
    bool verif;
    if(d[start]!=0)
        return 0;
    for(i=1; i<=n; ++i)
        if(i!=start)
           {
           verif=0;
           for (p=L[i]; p!=NULL; p=p->urm)
               if(d[i]>d[p->vec]+p->c)
                 return 0;
                 else
                 if(d[i]==d[p->vec]+p->c)
                   verif=1;
                //distantele calculate pot fi si mai mici; trebuie sa fim 100% siguri ca rezultatul este corect!
            if(verif==0)
                return 0;
        }
    return 1;
}

void inserare(LSI& L,int x, int cost, nod* p)
{
    nod* q;
    q=new nod;
    q->vec=x;
    q->c=cost;
    if (p==NULL)
        {
        q->urm=L;
        L=q;
        }
        else
        {
        q->urm=p->urm;
        p->urm=q;
        }
}