Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.Arrays;
  6. import java.util.LinkedList;
  7. import java.util.PriorityQueue;
  8. import java.util.Scanner;
  9. import java.util.Stack;
  10.  
  11. class Graph{
  12. int vertex;
  13. LinkedList<Pair>[] adj;
  14. int distance[];
  15. int id[];
  16.  
  17. public Graph(int vertex) {
  18. this.vertex = vertex;
  19. adj = new LinkedList[vertex];
  20. distance = new int[vertex];
  21. id = new int[vertex];
  22. Arrays.fill(distance, Integer.MAX_VALUE); //Maybe TLE's? idk man
  23. for(int i = 0; i < vertex; i++)
  24. {
  25. adj[i] = new LinkedList();
  26. }
  27. }
  28.  
  29. public void addEdge(int u, int v, int w) {
  30. Pair one = new Pair(w, u);
  31. Pair two = new Pair(w, v);
  32. adj[v].add(one);
  33. adj[u].add(two);
  34. }
  35.  
  36. public void shortestPath(int src) {
  37. PriorityQueue<Pair> pq = new PriorityQueue<>();
  38. pq.add(new Pair(0, src));
  39. distance[src] = 0;
  40.  
  41. while(!pq.isEmpty())
  42. {
  43. Pair p = pq.poll();
  44. int node = p.vertex;
  45.  
  46. for(Pair neighbor : adj[node]) {
  47. int v = neighbor.vertex;
  48. int w = neighbor.weight;
  49. if(distance[v] > distance[node] + w) {
  50. distance[v] = distance[node] + w;
  51. id[v] = node;
  52. pq.add(new Pair(distance[node], v));
  53. }
  54. }
  55. }
  56.  
  57. }
  58.  
  59. public void printGraph() {
  60. for(int i = 0; i < vertex; i++)
  61. {
  62. if(adj[i].size() > 0) {
  63. System.out.print("Node " + i + " is connected to ");
  64.  
  65. for(Pair j : adj[i]) {
  66. System.out.print(j + " ");
  67. }
  68. }
  69. System.out.println();
  70. }
  71. }
  72. }
  73.  
  74. class Pair implements Comparable<Pair>{
  75. public int weight;
  76. public int vertex;
  77.  
  78. public Pair(int w, int v) {
  79. weight = w;
  80. vertex = v;
  81. }
  82.  
  83. public int compareTo(Pair p)
  84. {
  85. int diff = this.weight-p.weight;
  86. if(diff == 0) diff = this.vertex-p.vertex;
  87. return diff;
  88. }
  89.  
  90. public String toString() {
  91. return "vertex " + vertex + " with weight " + weight;
  92. }
  93. }
  94.  
  95. //WEIGHT FIRST, NODE SECOND
  96. public class shortcut {
  97. public static void main(String[] args)throws IOException
  98. {
  99. Scanner kb = new Scanner(new File("shortcut.in"));
  100. PrintWriter pw = new PrintWriter(new FileWriter(new File("shortcut.out")));
  101.  
  102. //DETERMINE HOW MANY COWS VISIT A GIVEN NODE ON THEIR WAY TO THE BARN
  103. //USE IDS SIMILAR TO CODEFORCES DIJKSTRAS
  104.  
  105. //RUN SHORTEST PATH FROM BARN
  106. //TRY MAKING A BACKPATH FROM BARN TO EVERY SINGLE NODE
  107. int N = kb.nextInt();
  108. int M = kb.nextInt();
  109. int T = kb.nextInt();
  110.  
  111. Graph g = new Graph(N);
  112.  
  113. int[] cows = new int[N];
  114. for(int i = 0; i < N; i++)
  115. {
  116. cows[i] = kb.nextInt();
  117. }
  118.  
  119. for(int i = 0; i < M; i++) //MAY BE SOME TROUBLE WITH NODE ID's
  120. {
  121. int x = kb.nextInt();
  122. int y = kb.nextInt();
  123. int w = kb.nextInt();
  124. x--;
  125. y--;
  126. //System.out.println(x + " " + y);
  127. g.addEdge(x, y, w);
  128. }
  129.  
  130. g.shortestPath(0);
  131.  
  132. //dfs from each pasture i and add cows[i] to every pasture along the way
  133. int[] cowspassingthrough = new int[N];
  134. for(int i = 1; i < N; i++)
  135. {
  136. int cowstoadd = cows[i];
  137. int curr = i;
  138. while(curr!=0) {
  139. cowspassingthrough[curr]+=cowstoadd;
  140. curr = g.id[curr];
  141. }
  142.  
  143. }
  144.  
  145. /**for(int i = 0; i < N; i++)
  146. {
  147. System.out.println("distance from barn to pasture i = " + i + " is " + g.distance[i]);
  148. }**/
  149. int ans = 0;
  150. for(int i = 1; i < N; i++)
  151. {
  152. ans = Math.max(ans, cowspassingthrough[i]*(g.distance[i]-T));
  153. }
  154. pw.println(ans);
  155. pw.close();
  156. }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement