Cod sursa(job #1094636)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 29 ianuarie 2014 17:51:47
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<vector>
using namespace std;
int t,n,m,s,d[50001],x,y,c;
struct arc{ int nod,cost;};
vector <arc>l[50001];
ifstream in("distante.in"); ofstream out("distante.out");
int main(){
    in>>t;
    for(;t;--t){
        in>>n>>m>>s; bool ok=true;
        for(int i=1;i<=n;++i) in>>d[i];
        if(d[s]!=0){ out<<"NU\n"; continue;}
        for(int i=1;i<=m;++i){
            in>>x>>y>>c;
            if(d[x]+c<d[y]) ok=false;
            l[x].push_back((arc){y,c});
            l[y].push_back((arc){x,c});
        }
        for(y=1;y<=n;++y)
            if(y!=s){
                bool ok2=false;
                for(vector <arc> :: iterator it=l[y].begin(); it!=l[y].end();++it){
                    if(d[(*it).nod]+(*it).cost==d[y])
                        ok2=true;
                }
                if(ok2==false) ok=false;
            }
        if(ok==true) out<<"DA\n"; else out<<"NU\n";
        for(int i=1;i<=n;++i) l[i].clear();
    }
}