fork download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Main
  5. {
  6. static Vector<Triple> vect;
  7. static UF uf;
  8. static int min;
  9.  
  10. public static void main(String[] args) throws IOException
  11. {
  12.  
  13.  
  14.  
  15. String line = br.readLine();
  16.  
  17.  
  18. StringTokenizer sTok = new StringTokenizer(line);
  19.  
  20. int n = Integer.parseInt(sTok.nextToken());
  21.  
  22. int m = Integer.parseInt(sTok.nextToken());
  23.  
  24. int l = 0;
  25.  
  26. while(n + m != 0)
  27. {
  28. l++;
  29.  
  30. vect = new Vector<Triple>();
  31.  
  32. uf = new UF(n);
  33.  
  34. min = 0;
  35.  
  36. for(int i = 0; i < m; i++)
  37. {
  38. line = br.readLine();
  39.  
  40. sTok = new StringTokenizer(line);
  41.  
  42. int a = Integer.parseInt(sTok.nextToken()) - 1;
  43.  
  44. int b = Integer.parseInt(sTok.nextToken()) - 1;
  45.  
  46. int c = Integer.parseInt(sTok.nextToken());
  47.  
  48. vect.add(new Triple(c,a,b));
  49. }
  50.  
  51. line = br.readLine();
  52.  
  53. sTok = new StringTokenizer(line);
  54.  
  55. int start = Integer.parseInt(sTok.nextToken()) - 1;
  56.  
  57. int finish = Integer.parseInt(sTok.nextToken()) - 1;
  58.  
  59. double tou = Double.parseDouble(sTok.nextToken());
  60.  
  61.  
  62. Collections.sort(vect);
  63.  
  64.  
  65. for(int i = 0; i < vect.size(); i++)
  66. {
  67. if(uf.sameSet(start, finish))
  68. break;
  69.  
  70. Triple t = vect.get(i);
  71.  
  72. int w = t.w;
  73.  
  74. int v1 = t.v1;
  75.  
  76. int v2 = t.v2;
  77.  
  78. if(!uf.sameSet(v1, v2))
  79. {
  80. min = w;
  81. uf.union(v1, v2);
  82. }
  83. }
  84.  
  85. int result = 0;
  86.  
  87. if(min > 0)
  88. {
  89. min = min - 1;
  90. result = (int) Math.ceil(tou / min);
  91. }
  92.  
  93.  
  94. str.append("Scenario #" + l + "\n");
  95. str.append("Minimum Number of Trips = " + result + "\n\n");
  96.  
  97.  
  98. line = br.readLine();
  99.  
  100. sTok = new StringTokenizer(line);
  101.  
  102. n = Integer.parseInt(sTok.nextToken());
  103.  
  104. m = Integer.parseInt(sTok.nextToken());
  105. }
  106.  
  107.  
  108. out.write(str.toString());
  109.  
  110. out.flush();
  111.  
  112. }
  113. }
  114.  
  115. class UF
  116. {
  117. int[] array;
  118. int[] sizes;
  119. int count;
  120.  
  121. UF(int n)
  122. {
  123. array = new int[n];
  124. sizes = new int[n];
  125. count = n;
  126.  
  127. for(int i = 0; i < n; i++)
  128. {
  129. array[i] = i;
  130. sizes[i] = 1;
  131. }
  132. }
  133.  
  134. int size()
  135. {
  136. return count;
  137. }
  138.  
  139. int findSet(int i)
  140. {
  141. if(array[i] == i)
  142. return i;
  143. else
  144. return findSet(array[i]);
  145. }
  146.  
  147. boolean sameSet(int i, int j)
  148. {
  149. return findSet(i) == findSet(j);
  150. }
  151.  
  152. void union(int i, int j)
  153. {
  154. int a = findSet(i);
  155. int b = findSet(j);
  156.  
  157. if(a != b)
  158. {
  159. if(sizes[a] > sizes[b])
  160. {
  161. array[b] = a;
  162. sizes[a] += sizes[b];
  163. }
  164. else
  165. {
  166. array[a] = b;
  167. sizes[b] += sizes[a];
  168. }
  169.  
  170. count--;
  171. }
  172. }
  173. }
  174.  
  175. class Triple implements Comparable<Triple>
  176. {
  177. int w;
  178. int v1;
  179. int v2;
  180.  
  181. Triple(int a, int b, int c)
  182. {
  183. w = a;
  184. v1 = b;
  185. v2 = c;
  186. }
  187.  
  188. @Override
  189. public int compareTo(Triple that) {
  190. if(this.w > that.w)
  191. return -1;
  192. else if(this.w < that.w)
  193. return 1;
  194. else
  195. return 0;
  196. }
  197. }
  198.  
Runtime error #stdin #stdout 0.09s 380224KB
stdin
7 10
1 2 30
1 3 15
1 4 10
2 4 25
2 5 60
3 4 40
3 6 20
4 7 35
5 7 20
6 7 30
1 1 99

7 10
1 2 30
1 3 15
1 4 10
2 4 25
2 5 60
3 4 40
3 6 20
4 7 35
5 7 20
6 7 30
1 1 99
0 0
stdout
Standard output is empty