Advertisement
Guest User

266

a guest
May 24th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.89 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class Solution {
  5.  
  6.     public static int[] bfs(List<Integer>[] g, int s) {
  7.         int vertexCount = g.length;
  8.  
  9.         boolean[] used = new boolean[vertexCount];
  10.         Arrays.fill(used, false);
  11.         int[] p = new int[vertexCount];
  12.         Arrays.fill(p, -1);
  13.         int[] d = new int[vertexCount];
  14.         Arrays.fill(d, Integer.MAX_VALUE);
  15.  
  16.         Queue<Integer> q = new LinkedList<Integer>();
  17.  
  18.         p[s] = s;
  19.         d[s] = 0;
  20.         used[s] = true;
  21.         q.add(s);
  22.  
  23.         while (!q.isEmpty()) {
  24.             int u = q.remove();
  25.             for (int v : g[u]) {
  26.                 if (!used[v]) {
  27.                     used[v] = true;
  28.                     q.add(v);
  29.                     d[v] = d[u] + 1;
  30.                     p[v] = u;
  31.                 }
  32.             }
  33.         }
  34.         return d;
  35.     }
  36.  
  37.     public static void main(String[] args) throws IOException {
  38.         BufferedReader in = new BufferedReader(new FileReader("input.txt"));
  39.         String[] arr = in.readLine().split(" ");
  40.  
  41.         int n = Integer.parseInt(arr[0]);
  42.         int m = Integer.parseInt(arr[1]);
  43.  
  44.         List<Pair> e = new ArrayList<Pair>();
  45.         List<Integer>[] g = new List[n];
  46.  
  47.         for (int i = 0; i < n; i++) {
  48.             g[i] = new ArrayList<Integer>();
  49.         }
  50.  
  51.         for (int i = 0; i < m; i++) {
  52.             arr = in.readLine().split(" ");
  53.             int u = Integer.parseInt(arr[0]) - 1;
  54.             int v = Integer.parseInt(arr[1]) - 1;
  55.             g[u].add(v);
  56.             g[v].add(u);
  57.             e.add(new Pair(u, v));
  58.         }
  59.  
  60.         int[] ds = bfs(g, 0);
  61.         int[] dt = bfs(g, n - 1);
  62.  
  63.         int[] cnt = new int[n];
  64.         int[] idx = new int[n];
  65.  
  66.         List<Integer> ans = new ArrayList<Integer>();
  67.  
  68.         for (int i = 0; i < m; i++) {
  69.             if (ds[e.get(i).u] + 1 + dt[e.get(i).v] == ds[n - 1]) {
  70.                 cnt[ds[e.get(i).u]]++;
  71.                 idx[ds[e.get(i).u]] = e.get(i).v;
  72.             }
  73.             if (ds[e.get(i).v] + 1 + dt[e.get(i).u] == ds[n - 1]) {
  74.                 cnt[ds[e.get(i).v]]++;
  75.                 idx[ds[e.get(i).v]] = e.get(i).u;
  76.             }
  77.         }
  78.  
  79.         for (int i = 0; i < m; i++) {
  80.             if (cnt[ds[e.get(i).u]] == 1 && idx[ds[e.get(i).u]] == e.get(i).v
  81.                     || cnt[ds[e.get(i).v]] == 1 && idx[ds[e.get(i).v]] == e.get(i).u) {
  82.                 ans.add(i);
  83.             }
  84.         }
  85.  
  86.         PrintWriter writer = new PrintWriter(new BufferedOutputStream(System.out));
  87.  
  88.         writer.println(ans.size());
  89.         for (Integer an : ans) {
  90.             writer.print((an + 1) + " ");
  91.         }
  92.        
  93.         writer.close();
  94.     }
  95.  
  96.     private static final class Pair {
  97.         private int u;
  98.         private int v;
  99.  
  100.         private Pair(int u, int v) {
  101.             this.u = u;
  102.             this.v = v;
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement