Advertisement
Guest User

Untitled

a guest
Apr 25th, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class path {
  5.  
  6. final long INF = (Long.MAX_VALUE / 6) * 5;
  7.  
  8. void solve() throws IOException {
  9. int n = nextInt();
  10. int m = nextInt();
  11. int s = nextInt() - 1;
  12. int[] v1 = new int[m];
  13. int[] v2 = new int[m];
  14. long[] w = new long[m];
  15. for (int i = 0; i < m; i++) {
  16. v1[i] = nextInt() - 1;
  17. v2[i] = nextInt() - 1;
  18. w[i] = nextLong();
  19. }
  20. long[] d = new long[n];
  21. Arrays.fill(d, INF);
  22. d[s] = 0;
  23. for (int i = 0; i < n; i++) {
  24. for (int j = 0; j < m; j++) {
  25. if (d[v2[j]] != -INF && d[v1[j]] != -INF && d[v1[j]] != INF && d[v1[j]] + w[j] < d[v2[j]]) {
  26. d[v2[j]] = d[v1[j]] + w[j];
  27. if (d[v2[j]] < -INF)
  28. d[v2[j]] = -INF;
  29. }
  30. if (d[v1[j]] == -INF)
  31. d[v2[j]] = -INF;
  32. }
  33. }
  34. long[] dOld = d.clone();
  35. for (int i = 0; i < 2 * n; i++) {
  36. for (int j = 0; j < m; j++) {
  37. if (d[v1[j]] != INF && d[v1[j]] + w[j] < d[v2[j]]) {
  38. d[v2[j]] = -INF;
  39. }
  40. }
  41. }
  42. for (int i = 0; i < n; i++) {
  43. if (d[i] == INF) {
  44. out.println("*");
  45. } else if (d[i] != dOld[i] || d[i] == -INF) {
  46. out.println("-");
  47. } else {
  48. out.println(d[i]);
  49. }
  50. }
  51. }
  52.  
  53. final String TASKNAME = "path";
  54.  
  55. PrintWriter out;
  56. BufferedReader br;
  57. StringTokenizer st;
  58.  
  59. void run() throws IOException {
  60. br = new BufferedReader(new FileReader(new File(TASKNAME + ".in")));
  61. out = new PrintWriter(TASKNAME + ".out");
  62. solve();
  63. out.close();
  64. }
  65.  
  66. int nextInt() throws IOException {
  67. return Integer.parseInt(next());
  68. }
  69.  
  70. long nextLong() throws IOException {
  71. return Long.parseLong(next());
  72. }
  73.  
  74. double nextDouble() throws IOException {
  75. return Double.parseDouble(next());
  76. }
  77.  
  78. String next() throws IOException {
  79. while (st == null || !st.hasMoreTokens()) {
  80. st = new StringTokenizer(br.readLine());
  81. }
  82. return st.nextToken();
  83. }
  84.  
  85. public static void main(String[] args) throws IOException {
  86. new path().run();
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement