Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.io.*;
- public class dining {
- public static void main(String[] args) throws IOException{
- BufferedReader f = new BufferedReader(new FileReader("dining.in"));
- PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("dining.out")));
- StringTokenizer st = new StringTokenizer(f.readLine());
- int n = Integer.parseInt(st.nextToken());
- int m = Integer.parseInt(st.nextToken());
- int k = Integer.parseInt(st.nextToken());
- Node[] nodes = new Node[n+1];
- boolean[][] visited = new boolean[n+1][2];
- int[][] paths = new int[n+1][2];
- for(int i = 1; i <= n; i++) {
- nodes[i] = new Node(i);
- paths[i][0] = Integer.MAX_VALUE;
- paths[i][1] = Integer.MAX_VALUE;
- }
- for(int i = 0; i < m; i++) {
- st = new StringTokenizer(f.readLine());
- int a = Integer.parseInt(st.nextToken());
- int b = Integer.parseInt(st.nextToken());
- int t = Integer.parseInt(st.nextToken());
- nodes[a].edges.add(new Edge(t, nodes[b]));
- nodes[b].edges.add(new Edge(t, nodes[a]));
- }
- for(int i = 0; i < k; i++) {
- st = new StringTokenizer(f.readLine());
- int a = Integer.parseInt(st.nextToken());
- int b = Integer.parseInt(st.nextToken());
- nodes[a].haybales.add(b);
- }
- PriorityQueue<State> pq = new PriorityQueue<State>();
- paths[n][0] = 0;
- pq.add(new State(nodes[n], 0, 0));
- while(!pq.isEmpty()) {
- State state = pq.poll();
- int hay = state.hay > 0 ? 1 : 0;
- if(visited[state.node.id][hay]) continue;
- visited[state.node.id][hay] = true;
- for(Edge e: state.node.edges) {
- int newDist = e.weight+state.time;
- if(newDist < paths[e.dest.id][hay]) {
- paths[e.dest.id][hay] = newDist;
- pq.add(new State(e.dest, state.hay, newDist));
- }
- }
- if(hay == 0 && state.node.haybales.size() > 0) {
- int newHay = state.node.haybales.last();
- paths[state.node.id][1] = state.time-newHay;
- for(Edge e: state.node.edges) {
- int newDist = e.weight+state.time-newHay;
- if(newDist < paths[e.dest.id][1]) {
- paths[e.dest.id][1] = newDist;
- pq.add(new State(e.dest, newHay, newDist));
- }
- }
- }
- }
- for(int i = 1; i < n; i++) {
- if(paths[i][1] <= paths[i][0]) {
- out.println("1");
- }else {
- out.println("0");
- }
- }
- out.close();
- }
- }
- class Node{
- public int id;
- public LinkedList<Edge> edges;
- public TreeSet<Integer> haybales;
- public Node(int i) {
- id = i;
- edges = new LinkedList();
- haybales = new TreeSet<Integer>();
- }
- }
- class Edge{
- public int weight;
- public Node dest;
- public Edge(int w, Node d) {
- weight = w;
- dest = d;
- }
- }
- class State implements Comparable<State>{
- public Node node;
- public int time;
- public int hay;
- public State(Node n, int h, int t) {
- node = n;
- hay = h;
- time = t;
- }
- public int compareTo(State s) {
- return time - s.time;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement