BOJ 27558 - Find and Replace

image.png

그래프 애드혹 문제엔 성게 모양이나 ρ\rho 모양의 그래프를 이용한 성질이 단골 손님이다.

이 문제도 그런 류이다.

우선 s=ts=t 이면 정답은 00이다.

ttaz,AZa-z,A-Z 까지 5252개의 문자를 모두 포함하고 있다면 정답은 1-1 이다.

왜냐면 sis_itit_i로 만들기 위해 어떤 sis_i를 변환하는 순간 si=sjs_i=s_j 인 것이 생기고, ss에 있는 알파벳의 개수가 tt에 있는 알파벳의 개수 5252개보다 적어져서 불가능하다.

si=sjs_i=s_j 인데 titjt_i \ne t_j 인 경우가 있으면 정답은 1-1이다.

왜냐면 sis_isjs_j는 항상 같이 바뀌어야 하기 때문에 tt애서 다른 알파벳으로 귀결될 수 없기 때문이다.

그렇지 않다면 항상 가능하다.

sitis_i \to t_i 라는 그래프의 간선을 만든다. 그럼 어떤 알파벳은 항상 00 개 혹은 11 개의 out 간선을 가진다.

그러면 각 연결 컴포넌트마다 최대 한개의 싸이클이 생긴다.

싸이클이 생기지 않으면 그 컴포넌트에서의 정답은 간선의 개수이다.

싸이클이 생기고 모든 정점이 그 싸이클에 포함되면 그 컴포넌트에서의 정답은 간선의 개수 + 1 이다.

왜냐면 모두 싸이클에 포함되면 어떤 알파벳을 싸이클에 포함되지 않는 다른 알파벳으로 바꿔두었다가 다른 것들을 처리한 뒤 다시 그 알파벳을 원래 바꿔야 했던 것으로 바꿔야 해서 한 번 더 과정이 포함된다.

aba \to bbab \to a 를 보면, aca \to c 를 한 뒤에, bab \to a를 하고 cbc \to b를 하면 세 번으로 변환이 가능함이 보인다.

어떤 연결 컴포넌트에서 싸이클이 생겼지만 싸이클에 포함되지 않는 간선이 있다면 정답은 간선 개수이다.

왜냐면 그런 상황이면 적어도 indegree가 2이상인 싸이클 내부의 정점 uu이 존재한다는 의미이고, 싸이클 내부의 정점 vvvuv \to u 일 때, 싸이클 외부의 정점 xxxux \to u 라고 한다면 vxv \to x로 바꿔주면 되기 때문이다.

image.png

여기서 vxv \to x 를 하면,

image.png

이처럼 되어서 이제 싸이클이 없어져서 하나씩 처리해나가면 된다.

Tags:

Categories:

Updated:

Comments