사이클 판단

들어올때 양쪽 다 아직 없으면 vector 생성 후 넣기 한쪽만 있으면 해당 vector에 추가 한쪽씩 따로 있으면 연결 양쪽 다 있으면 cycle

점이 500,000개 입력이 1,000,000줄인데 이걸 어캐함

id로 처리?

vector 점 개수만큼 넣어놓고 vector[i]에 id 저장

id -1이면 아직 안 없는거 id가 있으면 넣기

n1, n2 들어오면

if vector[n1] != -1 && vector[n1] == vector[n2]: cout << 현재 진행 << endl; return;

else if vector[n1] == -1 && vector[n2] == -1: vector[n1] = id vector[n2] = id id++;

else if vector[n1] != -1 && vector[n2] != -1: int target_id = vector[n2]; for i=0->N: if vector[i] == target_id: vector[i] = vector[n1]

else if vector[n1] != -1 && vector[n2] == -1: vector[n2] = vector[n1]

else if vector[n2] != -1 && vector[n1] == -1: vector[n1] = vector[n2]

나머지는 다 괜찮은데 연결할때 복잡도가 좀 에러인데

다 통과하는데 시간초과 뜸


찾아보니까 Union_Find라는거로 풀 수 있다 함 id 기준이 아니라 root를 지정해서 다른 root면 같은 root로 지정, 같은 root면 cycle 초기에는 모두 자기자신 root 가짐. union시 자기 자신을 root로 가질때까지 올라가면서 변경.

초기 0 1 2 3 4

1 3 0 3 2 3 4

2 3 0 3 3 3 4

1 2 0 3 3 3 4 -> find, 3