250520 사이클 게임

Jongleee·2025년 5월 20일
0

TIL

목록 보기
904/970
public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	StringTokenizer st = new StringTokenizer(br.readLine());

	int nodeCount = Integer.parseInt(st.nextToken());
	int edgeCount = Integer.parseInt(st.nextToken());

	int[] rank = new int[nodeCount];
	int[] parent = new int[nodeCount];
	Arrays.fill(rank, 1);
	Arrays.fill(parent, -1);

	int cycleIndex = 0;
	for (int i = 0; i < edgeCount; i++) {
		st = new StringTokenizer(br.readLine());
		int nodeA = Integer.parseInt(st.nextToken());
		int nodeB = Integer.parseInt(st.nextToken());

		if (union(parent, rank, nodeA, nodeB)) {
			cycleIndex = i + 1;
			break;
		}
	}

	bw.write(String.valueOf(cycleIndex));
	bw.flush();
	bw.close();
	br.close();
}

private static int find(int[] parent, int node) {
	if (parent[node] < 0) {
		return node;
	}
	return parent[node] = find(parent, parent[node]);
}

private static boolean union(int[] parent, int[] rank, int nodeA, int nodeB) {
	int rootA = find(parent, nodeA);
	int rootB = find(parent, nodeB);

	if (rootA == rootB) {
		return true;
	}

	if (rank[rootA] > rank[rootB]) {
		parent[rootB] = rootA;
	} else if (rank[rootA] < rank[rootB]) {
		parent[rootA] = rootB;
	} else {
		parent[rootA] = rootB;
		rank[rootB]++;
	}

	return false;
}

출처:https://www.acmicpc.net/problem/20040

0개의 댓글