求助,这个算法有问题吗,只过30,是超时还是算法本身有问题
查看原帖
求助,这个算法有问题吗,只过30,是超时还是算法本身有问题
711726
showmaker1楼主2024/5/8 11:16


import java.io.BufferedReader;
import java.io.File;
import java.util.*;


public class Main {
    public static int[] e, ne, h;
    // 还需要一个数组来储存一个结点有多少的度
    public static int[] cnt, st;
    public static int idx;
    static{
        e = new int[100010];
        ne = new int[100010];
        h = new int[100010];
        cnt = new int[100010];
    }
    public static void add(int a, int b){
        e[idx] = b; ne[idx] = h[a]; h[a] = idx ++;
        cnt[a] ++;
    }
    public static int search(int a, int b){
        int sum = cnt[a], min = Integer.MAX_VALUE;
        st[a] = 1;
        if(a == b)return sum;// 说明此时已经找到了
        for(int i = h[a]; i != -1; i = ne[i]){
            int j = e[i];
            if(st[j] != 1){
                int k = search(j, b);
                if(k != -1){
                    // 说明找到
                    min = Math.min(k, min);
                }
            }
        }
        if(min == Integer.MAX_VALUE)return -1;// 说明没找到
        return sum + min;// 找到就返回最短路径
    }
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), m = in.nextInt();//
        for(int i = 0; i <= n + 9; i++)h[i] = -1;
        for(int i = 1; i < n; i++){
            int a = in.nextInt(), b = in.nextInt();
            add(a, b);
            add(b, a);
        }
        for(int i = 0; i < m; i++){
            st = new int[100010];
            int a = in.nextInt(), b = in.nextInt();
            if(a == b)System.out.println(cnt[a]);
            else System.out.println(search(a, b));
        }
    }
}

2024/5/8 11:16
加载中...