java MLE咋搞呀,其他的都对
查看原帖
java MLE咋搞呀,其他的都对
440272
xxb123楼主2021/1/26 22:13

import java.util.Scanner;

public class DisjointSet {
	public static void main(String[] args) {
		DisjointSet m = new DisjointSet();
		m.handleInput();
	}
	int m=0;
	int n=0;
	public void handleInput() {
		Scanner in = new Scanner(System.in);
		if (in.hasNext()) {
			m = in.nextInt();
			n = in.nextInt();}
		int[] parent = new int[m];
		int[] rank = new int[m];
		int[][] a = new int[n][2];
		int[] q = new int[n];
		initialise(parent,rank);
		for(int i=0;i<n;i++) {
			q[i] = in.nextInt();
			for(int j=0;j<2;j++) {
				a[i][j] = in.nextInt();
			}
		}
		in.close();
		for(int i=0;i<n;i++) {
			if(q[i]==1) {
				union_vertices(a[i][0]-1,a[i][1]-1,parent,rank);
			}
			else if(q[i]==2) {
				int z1 = find_root(a[i][0]-1,parent);
				int z2 = find_root(a[i][1]-1,parent);
				if(z1==z2) {
						System.out.println("Y");
				}
				else
						System.out.println("N");
			}
		}
	}
	
	public void initialise(int parent[],int rank[]) {
		for(int i=0;i<m;i++) {
			parent[i] = i;
		}
		for(int i=0;i<m;i++) {
			rank[i] = 0;
		}
	}
	
	public int find_root(int x1,int parent[]) {
		int x_root = x1;
		while(parent[x_root]!=x_root) {
			parent[x_root] = parent[parent[x_root]];
			x_root = parent[x_root];
		}
		return x_root;
	}
	
	public int union_vertices(int x2,int y,int parent[],int rank[]) {
		int x_root = find_root(x2,parent);
		int y_root = find_root(y,parent);
		if(x_root==y_root) {
			return 0;
		}
		else {
			if(rank[x_root]>rank[y_root]) {
				parent[y_root] = x_root;
			}
			else if(rank[x_root]<rank[y_root]) {
				parent[x_root] = y_root;
			}
			else {
				parent[x_root] = y_root;
				rank[y_root]++;
			}
			return 1;
		}
	}

}
2021/1/26 22:13
加载中...