Вам дан связный неориентированный граф. На каждом ребре написан его вес — целое положительное число. Длина пути во взвешенном графе — это сумма весов тех ребер, из которых состоит путь. Расстояние между вершинами — это длина кратчайшего пути. Диаметр графа определяется как максимально возможное среди всех кратчайших расстояний между парой вершин: Ваша задача найти диаметр графа.
Заметим, что предложенный граф — дерево. Тогда нас всего лишь просят найти диаметр дерева. Эта задача является известной и разрешима за dfs-ом , где n — количество вершин, а m — количество ребер, так как граф является деревом m = n — 1, а асимптотика тогда
. Однако можно решить задачу и алгоритмом Флойда-Уоршалла за
. Подробнее можно почитать в статье на codeforces. В нашем случае решение происходит скорее всего руками и за
. Ведь для каждой вершины можно за
подсчитать расстояние до всех вершин, итого сделать это для всех вершин займет
операций. Руками это делается довольно быстро. Аналогиченое решение задачи: давайте подвесим дерево за некоторую вершину и будем решать задачу на поддеревьях. Тогда диаметр либо проходит через корень дерева и тогда наибольшее расстояние равно сумме расстояний до двух наиболее удаленных вершин, либо диаметр находится в каком-то поддереве и является уже подсчитанным ответом. Асимптотика решения что руками, что алгоритмом написанном на любом языке программирования
.