Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Dec 17, 2025

🧷 문제 링크

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

🧭 풀이 시간

60분

👀 체감 난이도

✏️ 문제 설명

정점 N개, 간선 M개인 그래프가 주어지고, 특정 간선의 가중치가 바뀌는 시나리오가 Q번 주어지면, 각 시나리오에서의 MST 가중치 합을 구해보자.

🔍 풀이 방법

일단 MST를 구해놓고, 시나리오에서 처리하는 간선이 MST에 사용된 간선인 경우와 그렇지 않은 경우로 나눈다.

만약 MST에 사용된 간선인 경우에는 그 간선을 뺐을 때 분리되는 두 컴포넌트를 잇는 최소 가중치의 간선을 찾아서 끼워넣으면 된다. 혹은 바뀐 가중치가 더 작다면 그걸 넣으면 된다.
대체 간선은 분리 집합 + LCA로 전처리 가능하다.

MST에 사용되지 않은 간선인 경우에는 그 간선이 MST상에서 이루는 경로 상의 최대 가중치를 찾아서 빼주거나, 기존의 MST를 그대로 사용하면 된다.
희소 배열로 경로 최대 가중치를 구할 수 있다.

⏳ 회고

근데 왜 틀리지?

@oncsr oncsr added the fail 😢 해설을 보고 풀었거나, 못 풀었을 때 label Dec 17, 2025
@ShinHeeEul ShinHeeEul merged commit eb5cd8c into main Dec 17, 2025
1 check passed
@oncsr
Copy link
Contributor Author

oncsr commented Dec 17, 2025

x = par[x][0];
root[x] = find(par[x][0]);

-> union과 부모 이동의 순서가 잘못됨.

if(a != b) {
    mx = Math.max(Math.max(max[a][0], max[b][0]);
}

-> max값 갱신이 잘못됨.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants