Cod sursa(job #2186065)

Utilizator petrea1551Petrea Calin petrea1551 Data 25 martie 2018 12:21:14
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>
using namespace std;
 
int dist[50100], a[50010];
set<pair<int, int> > q;
vector<pair<int, int> > v[50001];
 
int main()
{
    ifstream cin("distante.in");
    ofstream cout("distante.out");
    int n, m, t, s;
    cin >> t;
    for (int h = 1; h <= t; h++)
    {
    	memset(dist, 0, sizeof(dist));
    	memset(a, 0, sizeof(a));
    	set<pair<int, int> > q;
		vector<pair<int, int> > v[50001];
    	cin >> n >> m >> s;
    	for (int i = 1; i <= n; i++)
			cin >> a[i];
    	for (int i = 1; i <= m; i++)
    	{
    	    int x, y, z;
    	    cin >> x >> y >> z;
    	    v[x].push_back({y, z});
    	    v[y].push_back({x, z});
    	}
    	for (int i = 2; i <= n; i++)
    	    dist[i] = 443446554;
    	q.insert({0, s});
    	while (!q.empty())
    	{
    	    int c = q.begin()->second;
    	    int d = q.begin()->first;
    	    q.erase(q.begin());
       		int p = v[c].size();
        	for (int i = 0; i < p; i++)
       		{
        		int destination = v[c][i].first;
        		int weight = v[c][i].second;
        		if (dist[c] + v[c][i].second < dist[destination])
        		{
       		 		if(dist[destination] != 443446554)
        				q.erase(q.find({dist[destination], destination}));
        			dist[destination] = dist[c] + weight;
        			q.insert({dist[destination], destination});
				}
			}
    	}
    	if (memcmp(a, dist, sizeof(a)) == 0)
    		cout << "NU\n";
    	else
    		cout << "DA\n";
	}
}