Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Scanner;
- public class nccc6s3 {
- public static int N,M,log;
- public static int lca[][], depth[];
- public static long dis[];
- public static ArrayList<Integer> adj[], dist[];
- public static void main(String[] args) throws IOException {
- Scanner sc = new Scanner(System.in);
- N = sc.nextInt(); M = sc.nextInt();
- log = (int) (Math.log(N)/Math.log(2)) + 1;
- depth = new int[N + 1]; lca = new int[log][N+1];
- dis = new long[N + 1];
- adj = new ArrayList[N+1]; dist = new ArrayList[N+1];
- for (int i = 0; i < lca.length; i++)
- Arrays.fill(lca[i], -1);
- for (int i=0; i<=N; i++) {
- adj[i] = new ArrayList<Integer>();
- dist[i] = new ArrayList<Integer>();
- }
- for (int i=0; i<M; i++) {
- int u = sc.nextInt()-1, v = sc.nextInt()-1, d = sc.nextInt();
- adj[u].add(v); adj[v].add(u);
- dist[u].add(d); dist[v].add(d);
- }
- dfs(0, -1);
- build();
- int Q = sc.nextInt();
- for (int i=1; i<=Q; i++) {
- int u = sc.nextInt() - 1, v = sc.nextInt() - 1, rt = query(u, v);
- System.out.println(dis[u] + dis[v] - 2 * dis[rt]);
- }
- }
- static void dfs(int u, int pa) {
- for (int i=0; i<adj[u].size(); i++) {
- int v = adj[u].get(i), w0 = dist[u].get(i);
- if (v!=pa) {
- depth[v] = depth[u] + 1;
- dis[v] = dis[u] + w0;
- lca[0][v] = u;
- dfs(v, u);
- }
- }
- }
- static int query(int u, int v) {
- if (depth[u]<depth[v]) {
- int a = u;
- u = v;
- v = a;
- }
- for (int i=lca.length-1; i>=0; i--) {
- if (lca[i][u]!=-1 && depth[lca[i][u]]>=depth[v])
- u = lca[i][u];
- }
- if (u == v)
- return v;
- for (int i=lca.length-1; i>=0; i--) {
- if (lca[i][u]!=-1 && lca[i][v]!=-1 && lca[i][u]!=lca[i][v]) {
- u = lca[i][u];
- v = lca[i][v];
- }
- }
- return lca[0][u];
- }
- static void build() {
- for (int i=1; i<lca.length; i++) {
- for (int j=0; j<=N; j++) {
- if (lca[i-1][j]!=-1)
- lca[i][j] = lca[i-1][lca[i-1][j]];
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement