Возможно идея неправильная или не оптимальная, потому как она обещает работать не только для двух коровников.
Допустим мы научились для заданного расстояния определять, а можно ли так расставить коровники чтобы максимально расстояние не превышало заданного, т.е. мы максимальное расстояния знать не будем, мы только можем отвечать можно или нельзя.
Тогда если мы это умеем можно воспользоваться дихотомией (двоичным поиском) для поиска минимального такого расстояния которое нам подходит. Ведь если для какого либо расстояние можно расположить коровники, то и для любого большего тоже можно расположить, и наоборот - если для какого либо нельзя, то и для меньшего тоже нельзя.
Теперь осталась научиться определять можно или нельзя. Пока идея только такая - идем обходом в глубину (обход начинаем из любой вершины) и определяем надо ли в текущей вершине(лужайке) ставить коровник.
Как определяем:
Допустим в текущем поддереве нет коровника, тогда коровник поставиться в текущую лужайку если высота дерева (расстояние до максимально удаленной лужайки в текущем поддереве) равна заданному расстоянию, тогда ставим.
Если уже есть коровник, тогда среди тех лужаек которые не могут за заданное расстояние добраться до коровника находим максимально удалённую и также ставим если оно равно заданному. Максимальна удаленная лужайку будет листом. Допустим мы хотим найти максимально удаленную для текущей вершины (лужайки). Надо проверить только те вершины которые являются максимально удаленными вершинами потомков текущей вершины.
Можно заметить что первый случай легко может быть обработан во втором.