Cod sursa(job #2371199)

Utilizator aditzu7Adrian Capraru aditzu7 Data 6 martie 2019 16:39:34
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <queue>
#include <string.h>
#include <vector>
using namespace std;
vector <pair <int, int> > v[50005];
int use[50005],d[50005];
int t,k,n,m,s,i,d2[50005];
priority_queue <pair<int, int>, vector<pair <int,int> >, greater <pair <int, int> > > h;
void dijkstra(){
int j,i,x,y,z;
for(i=1;i<=n;i++)
v[i].clear();
for(i=1;i<=m;i++)
{
    scanf("%d%d%d",&x,&y,&z);
    v[x].push_back(make_pair(z,y));
    v[y].push_back(make_pair(z,x));

}

//for(i=1;i<=n;i++) printf("%d ",v[i].size());
for(i=1;i<=n;i++) d[i]=1e9;
d[s]=0;
memset(use,0,sizeof(use));
h.push(make_pair(0,s));

while(!h.empty()){
    int nod=h.top().second;
    h.pop();
if(!use[nod]){
    for(i=0;i<v[nod].size();i++)
        if(v[nod][i].first+d[nod]<d[v[nod][i].second])
        {d[v[nod][i].second]=v[nod][i].first+d[nod];
        h.push(make_pair(d[v[nod][i].second],v[nod][i].second));
        }

    use[nod]=1;


}



}
int ok=1;
for(i=1;i<=n;i++) if(d[i]!=d2[i]) ok=0;
//for(i=1;i<=n;i++) printf("%d ",d[i]);
if(ok==1) printf("DA\n");
else printf("NU\n");



}
int main()
{

freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);

scanf("%d",&t);
for(k=1;k<=t;k++){
    scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++) scanf("%d",&d2[i]);
    dijkstra();


}

    return 0;
}