Cod sursa(job #2102787)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 9 ianuarie 2018 14:55:32
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
using namespace std;
vector <int> AD[50001],COST[50001];
int v[50001],viz[50001],dmin[50001];
void dfs(int x)
{
//    int ;
    viz[x]=1;
    for(int i=0; i<AD[x].size(); i++)
        if(!viz[AD[x][i]])
        {
            dmin[AD[x][i]]=dmin[x]+COST[x][i];
            dfs(AD[x][i]);
        }
        else
            if(dmin[AD[x][i]]>dmin[x]+COST[x][i])
            {
                dmin[AD[x][i]]=dmin[x]+COST[x][i];
                dfs(AD[x][i]);
            }
}
int main()
{
    int t,ct,n,m,s,i,a,b,c;
    ifstream f("distante.in");
    ofstream g("distante.out");
    f >> t;
    for(ct=0; ct<t; ct++)
    {
        f >> n >> m >> s;
        for(i=1; i<=n; i++)
            f >> v[i];
        for(i=0; i<m; i++)
        {
            f >> a >> b >> c;
            AD[a].push_back(b);
            COST[a].push_back(c);
            AD[b].push_back(a);
            COST[b].push_back(c);
        }
        dfs(s);
        for(i=1; i<=n && v[i]==dmin[i]; i++);
        if(i>n) g << "DA\n";
        else g << "NU\n";
        memset(v+1,0,n);
        memset(viz+1,0,n);
        memset(dmin+1,0,n);
        for(i=1; i<=n; i++)
        {
            AD[i].clear();
            COST[i].clear();
        }
    }

    return 0;
}