https://www.acmicpc.net/problem/1976

 

1976번: 여행 가자

동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인

www.acmicpc.net

음 union find로 풀면 일단 경로는 잡을수 잇는데

가장 중요포인트는 이 경로가 전부 하나로 이어져잇는지에 대한 이해가 좀 필요한 문제입니다.

즉 경로들

경로0 1 2 3

루트0 2 3 3 일떄

1->2

2->3

3->3

이면 start가 1일 때 2로 가고 find를 통해 2에서 3으로 갑니다.

즉 다음 명령어인 2를 가도 동일 3으로 갑니다.

그리고 마지막 명령어인 3은 3루트를 가지고 잇으므로  3으로 갑니다.

이때 모든 명령어가 3루트라는곳을 향해 가기때문에 이 길들은 모두 하나로 이어져잇는셈이죠

import java.util.*;

import java.lang.*;
import java.lang.reflect.Array;
import java.io.*;
public class Main {

	private int  parent[];
	public Main(int size) {
		parent =new int[size];
		
		for(int i=0;i<size;i++) {
			parent[i]=i;
		}
	}
	
    public int find(int x) {
    	if(x!=parent[x]) {
    		parent[x]=find(parent[x]);
    	}
    	return parent[x];
    }
    
    public int track(int x) {
    	if(x!=parent[x]) {
    		parent[x]=find(parent[x]);
    	}
    	return parent[x];
    }
    
	public void union(int x,int y) {
		int rootX=find(x);
		int rootY=find(y);
		
		if(rootX!=rootY) {
			parent[rootX]=rootY;
		}
	}
	public void Prints(int size ) {
		for(int i=0;i<size;i++) {
		   System.out.print(parent[i]+",");
		}
	}
	
	public static void main(String[] args) throws Exception {
		Scanner scan =new Scanner(System.in);
        //동혁이는 친구들과 함꼐 여향을 가려한다.
		// 한국에는  도시가 n개 잇고
		//임의의 두 도시 사이에 길이 잇을수도 잇고 없을수도 잇다 
		//동혁이는 여행 일정이 주어졋을때,
		//이 여행 경로가 가능한것인지 확인
		//물론 중간에 다른 도시를 경유해서 여행할수 잇다
		//예를들어  a-b, b-c, a-d, b-d, e-a
		// e  c  b c d 
		// E-A-B-C-B-C-B-D
		//길의 가능여부를 판별 하는것을 작성하자 
		int n=scan.nextInt();
		int m=scan.nextInt();
		
		Main uf=new Main(n+1);
		for(int i=1;i<n+1;i++) {
			for(int j=1;j<n+1;j++) {
			int a=scan.nextInt();
			
				//if(i!=j) {
					if(a==1) {
						uf.union(i, j);
					}
					
				//}
			
			}			
		}
		
		boolean bCheck=false;
		int start=uf.find(scan.nextInt());
		for(int i=1;i<m;i++) {
			if(start!=uf.find(scan.nextInt()))
			{
				bCheck=true;
				break;
			}
		}
		
		if(bCheck==false) {
			System.out.println("YES");
		}else {
			System.out.println("NO");
		}
		
	}
}

'알고리즘 공부' 카테고리의 다른 글

백준 치즈 2638  (1) 2023.12.19
백준 스도쿠  (0) 2023.12.18
백준 집합의 표현  (0) 2023.12.12
백준 뱀과 사다리 게임  (0) 2023.12.12
백준 주사위 굴리기  (1) 2023.12.11

+ Recent posts