해설
색 집합 에 대하여, 에 속한 색 중 적어도 하나로 칠할 수 있는 간선들의 집합을 라 하자. 즉 이다. 또한 를 의 간선만 사용하여 만들 수 있는 forest의 최대 간선 수, 즉 안에서 사이클 없이 택할 수 있는 간선 수의 최댓값이라 하자.
는 DSU로 계산할 수 있다. 처음에는 모든 정점을 서로 다른 component에 둔다. 간선을 하나씩 보면서, 그 간선이 에 속한 색 중 하나라도로 칠할 수 있으면(즉 이면) 양 끝점을 합친다. 이때 실제로 서로 다른 두 component가 합쳐진 횟수가 이다. 색이 7개뿐이므로 비어 있지 않은 색 집합은 개이며, 따라서 모든 에 대하여 를 미리 계산해 둘 수 있다.
판정 조건
spanning tree는 항상 정확히 개의 간선을 가지므로, 먼저 이어야 한다. 이 조건이 성립하지 않으면 답은 No이다. 이 조건이 성립한다고 할 때, 답이 Yes이기 위한 필요충분조건은 모든 색 집합 에 대하여
가 성립하는 것이다.
이 조건의 필요성은 다음과 같이 확인된다. 색 집합 에 속한 색으로 칠해야 하는 간선은 총 개이다. 그런데 색이 에 속하도록 칠해진 간선은 모두 에 속해야 하고, spanning tree의 부분집합이므로 그들끼리도 사이클을 이룰 수 없다. 따라서 그 개수는 안의 forest 최대 크기인 를 넘을 수 없다. 즉 를 만족하는 색 집합 가 존재하면 답은 No이다.
이제 이 조건이 충분함을 보인다.
증명
간선 집합 위의 독립성을 "사이클을 이루지 않음"으로 정의하면, 독립 집합은 forest이며 그 rank는 해당 간선 집합 내 forest의 최대 크기이다. 이는 곧 graph matroid이다.
Theorem 2.1. Rado's Theorem
matroid 의 ground set을 , rank 함수를 라 하고, 집합 가 주어졌다고 하자. 각 마다 를 택하여 이 모두 서로 다르고 이 에서 독립이 되도록 할 수 있을 필요충분조건은 모든 에 대하여
가 성립하는 것이다.
색 로 칠할 수 있는 간선들의 집합을 라 하자(즉 ). 각 색 마다 정확히 개의 간선을 선택하되, 선택된 간선들은 전체적으로 서로 다르고 사이클을 이루지 않아야 한다.
각 색 에 대하여 "에서 간선 하나를 선택한다"는 요구사항을 개 생성한다. Theorem 2.1을 적용하면, 모든 요구사항을 서로 다른 간선으로 만족하면서 전체가 독립(forest)이 되도록 할 수 있을 필요충분조건은, 요구사항들의 임의의 부분집합에 대하여 해당 요구사항들이 선택할 수 있는 간선들의 합집합의 rank가 요구사항의 개수 이상인 것이다.
요구사항들의 부분집합 하나를 택하고, 거기에 등장하는 색들의 집합을 라 하자. 해당 요구사항들이 선택할 수 있는 간선들의 합집합은 이고 그 rank는 이다. 주어진 색 집합 에 대하여 가장 강한 제약은 에 속한 색의 요구사항을 모두 포함하는 경우에 발생하며, 이때 요구사항의 개수는 이다. 따라서 Theorem 2.1의 조건은 정확히 "모든 에 대하여 "와 동치이다.
이 조건이 성립하면 각 색 에서 정확히 개의 간선을 선택하여 전체가 forest가 되도록 할 수 있다. 이므로 선택된 간선은 총 개이고, 정점이 개인 그래프에서 개의 간선을 갖는 forest는 연결되어 있어야 하므로 spanning tree이다. 따라서 조건을 만족하는 spanning tree와 색 배정이 존재한다.
구현과 시간복잡도
정리하면, 한 질의의 답이 Yes이기 위한 필요충분조건은 두 가지이다. 첫째, 이어야 한다. 둘째, 모든 색 집합 에 대하여 이어야 한다.
따라서 각 질의마다 먼저 합이 인지 확인하고, 그렇지 않으면 No를 출력한다. 이후 개의 색 집합을 모두 검사하여, 하나라도 위배되면 No를, 모두 만족하면 Yes를 출력한다.
는 bitmask DP로 한 번에 구할 수 있다. 색 를 비트 에 대응시키고, 에서 임의의 색 하나를 제거하면 이므로, 질의 하나당 에 모든 에 대한 를 구할 수 있다.
전체 시간복잡도는 이다. 첫 번째 항은 개의 색 집합 각각에 대하여 DSU로 를 전처리하는 비용이며, 두 번째 항은 각 질의에서 모든 색 집합을 검사하는 비용이다.
Solution by Claude Opus 4.8