We consider the NP-complete problem of deciding whether an input graph on n vertices has k vertex-disjoint copies of a fixed graph H. For H = K 3 (the triangle) we give an O(2 2k log k+1.869k n 2 ) algorithm, and for general H an O(2 k|H| log k+2k|H| log |H| n |H| ) algorithm. We introduce a preprocessing (kernelization) technique based on crown decompositions of an auxiliary graph. For H = K 3 this leads to a preprocessing algorithm that reduces an arbitrary input graph of the problem to a graph on O(k 3 ) vertices in polynomial time.
INTRODUCTIONFor a fixed graph H and an input graph G, the H-packing problem asks for the maximum number of vertex-disjoint copies of H in G. The K 2 -packing (edge packing) problem, which is equivalent to maximum matching, played a central role in the history of classical computational complexity. The first step towards the dichotomy of 'good' (polynomialtime) versus 'presumably-not-good' (NP-hard) was made in a paper on maximum matching from 1965 [E65], which gave a polynomial time algorithm for that problem. On the other hand, the K 3 -packing (triangle packing) problem, which is our main concern in this paper, is NP-hard [HK78].Recently, there has been a growing interest in the area of exact exponential-time algorithms for NP-hard problems. When measuring time in the classical way, simply by the 1