Cod sursa(job #1739119)

Utilizator flaviu_2001Craciun Ioan-Flaviu flaviu_2001 Data 8 august 2016 17:24:51
Problema Distante Scor 50
Compilator java Status done
Runda Arhiva de probleme Marime 3.05 kb
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.LinkedList;

public class Main {

	static ArrayList<Integer>[] vx = (ArrayList<Integer>[]) new ArrayList[50009];
    static ArrayList<Integer>[] vy = (ArrayList<Integer>[]) new ArrayList[50009];
    static LinkedList<Integer> q = new LinkedList<Integer>();
    static int[] d = new int[50009];
    static int[] f = new int[50009];
    static int n, m, t, initial_point;
    static final int INF = 2147483647;
	
    public static boolean bell(){
    	
    	d[initial_point] = 0;
        q.add(initial_point);
         
        while(q.size() > 0){
            int k = q.remove();
             
            for (int i = 0; i < vx[k].size(); ++i)
                if (d[vx[k].get(i)] > d[k] + vy[k].get(i)){
                    d[vx[k].get(i)] = d[k] + vy[k].get(i);
                    q.add(vx[k].get(i));
                }
        }
        
        for (int i = 1; i <= n; ++i)
        	if (d[i] != f[i])
        		return false;
        
        return true;
    	
    }
    
	public static void main(String[] args) {
		
		for (int i = 0; i < 50009; ++i){
            vx[i] = new ArrayList<Integer>();
            vy[i] = new ArrayList<Integer>();
        }
		
		try{
            BufferedReader bf = new BufferedReader(new FileReader("distante.in"));
            OutputStream fout = new BufferedOutputStream (new FileOutputStream("distante.out"));
            
            String tmp[] = bf.readLine().split(" ");
            t = Integer.parseInt(tmp[0]);
            
            while(t-- > 0){
            	for (int i = 0; i < 50009; ++i){
                    vx[i].clear();
                    vy[i].clear();
                }
            	
	            tmp = bf.readLine().split(" ");
	            n = Integer.parseInt(tmp[0]);
	            m = Integer.parseInt(tmp[1]);
	            initial_point = Integer.parseInt(tmp[2]);
	            
	            tmp = bf.readLine().split(" ");
	            for (int i = 0; i < n; ++i)
	            	f[i+1] = Integer.parseInt(tmp[i]);
	            
	            for (int i = 1; i <= m; ++i){
	                int x, y, z;
	                tmp = bf.readLine().split(" ");
	                x = Integer.parseInt(tmp[0]);
	                y = Integer.parseInt(tmp[1]);
	                z = Integer.parseInt(tmp[2]);
	                vx[x].add(y);
	                vy[x].add(z);
	                vx[y].add(x);
	                vy[y].add(z);
	            }
	            
	            for (int i = 0; i < 50009; ++i)
	                d[i] = INF;
	            
	            if (bell())
	            	fout.write(("DA\r\n").getBytes());
	            else fout.write(("NU\r\n").getBytes());
            }
            bf.close();
            fout.flush();
            fout.close();
        }catch(Exception ex){
            System.out.println("ERROR LIKELY NO FILE");
        }

	}

}