백준 2887 : 행성 터널
https://www.acmicpc.net/problem/2887 행성터널. 최소스패닝트리 문제이다. 간선의 정보를 주는 것이 아니라 정점의 정보(x, y, z 좌표) 를 준다. 따라서 주어진 정점의 정보를 토대로 후보 간선들을 정해야 하는데 정점 N이 100,000 이므로 N^2 연산으로 모든 행성들을 일일이 다 연결시키면 초과가 발생한다. 따라서 간선의 후보를 주어진 조건에 맞게 적절히 설정해야한다.우선 행성과 행성간의 3차원상에서의 거리가 가중치가 아닌x,y,z좌표 중에서 거리가 짧은것 하나만 가중치가 된다. 또한, 모든 행성을 후보로 연결할 필요 없이 x,y,z 좌표중 행성 가까이에 있는 행성들만 후보터널로 사용하면된다. 예시가 다음과 같이 주어졌다 행성번호 1 2 3 4 5 x , y, z 11..
더보기
백준 10423 : 전기가 부족해
https://www.acmicpc.net/problem/10423 Union-Find를 살짝 응용한 문제.최소 스패닝 트리이되 무조건 모든 노드가 연결이 되는 문제가 아니다. 모든 도시가 연결되어있을 필요는 없고 다만 모든 도시가 발전소와 연결되어 있기만 하면 된다.발전소를 보유하고 있는 도시 가 주어지므로 발전소를 -1로 두었다. 뿌리노드 배열을 -1로 두고 최종적으로 모든 노드의 뿌리노드가 -1이 되면 발전소와 연결이 된 것이다.예시를 참고하자면 1,2,9번 도시가 발전소를 보유하고 있으므로 다음과 같이 설정하고 시작해준다. * vRoot[][1,2,3,4,5,6,7,8,9]-> [-1,-1,3,4,5,6,7,8,-1] ... -> [-1,-1,-1,-1,-1,-1,-1,-1,-1] 이 되면 연결완..
더보기
백준 2463 : 비용
https://www.acmicpc.net/problem/2463 쉽지 않은 문제였다... 단 이 과정에서 해당 노드가 속해있는 최상단 뿌리노드 외에 배열을 하나 더 설정해주어야 하는데 그 뿌리노드에 속한 노드들의 개수를저장해주어야 한다. 만약 vRoot[] 가 1,2,3,4,5,6 이면 임의로 groupSize[] 의 변수를 만들고 각 노드그룹이 속한 개수 1,1,1,1,1,1 로 초기화 시켜준다.3과 6이 합병되면 3,6의 vRoot는 3으로 통일이 된다. 그럼 이때 3번노드는 3과 6 두개의 노드를 가지고 잇는 뿌리노드이므로 groupSize[3] = 2가 되어야한다 이는 본래 groupSize[3] 의 값인 1에다가 6의 뿌리노드(6 자신)의 개수 groupSize[6]의 값 1을 합친 2가 되는..
더보기