Cod sursa(job #1428149)

Utilizator RanKBrinduse Alexandru RanK Data 3 mai 2015 19:12:48
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
  
#include <stdlib.h>
#include <queue>
#include <vector>
  
using namespace std;
 
 
#define IN_FILE_NAME "distante.in"
#define OUT_FILE_NAME "distante.out"
 
unsigned int givenDistances[50000];
unsigned int foundDistances[50000];
 
int main()
{   
    int tests = 0, t = 0;
  
    FILE *pFin, *pFout;
  
    pFin = fopen(IN_FILE_NAME, "r");
    pFout = fopen(OUT_FILE_NAME, "w");
     
    fscanf(pFin, "%d", &tests);
    for(t=0; t<tests; t++)
    {
        int n, m, s;
        fscanf(pFin, "%d %d %d", &n, &m, &s);
 
        //Edges.clear();
        //Edges = vector<vector<EDGE*>>(n);
 		//
        memset(givenDistances, 0, sizeof(givenDistances));
        memset(foundDistances, 0, sizeof(foundDistances));
 
        int i;
        for(i=0; i<n; i++)
        {
            int nr;
            fscanf(pFin, "%d", &nr);
            givenDistances[i] = nr;
        }
        s-=1;
        foundDistances[s] = 1;
 
        for(i=0; i<m; i++)
        {
            // Read edges
            int a,b,c;
            fscanf(pFin, "%d %d %d", &a, &b, &c);
 
            a-=1; b-=1; 
            //InsertEdge(&(Edges[a]), b, c);
            //InsertEdge(&(Edges[b]), a, c);
			if(c==0 && givenDistances[a] == givenDistances[b])
			{
				foundDistances[a] = 1; foundDistances[b] = 1;
			}
			if(givenDistances[a] + c == givenDistances[b]) foundDistances[b] = 1;
			else if(givenDistances[b] + c == givenDistances[a]) foundDistances[a] = 1;
        }
		
		for(i=0; i<n; i++)
		{
			if(foundDistances[i] == 0)
				break;
		}

		if(i==n)
			fprintf(pFout, "DA\n");
		else
			fprintf(pFout, "NU\n");
	}
 
     
    fclose(pFin);
    fclose(pFout);
 
    return 0;
}