题意:求树的直径
思路:就是道模板题,两遍dfs就求出来了
Code
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; typedef pair<int, int> P; const int MAX_N = 1000005; vector<P> G[MAX_N]; int n, m, s, ans; int u, v, val; char ch; void dfs(int u, int pre, int step) { if (ans<step) ans = step, s = u; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i].first, val = G[u][i].second; if (v!=pre) dfs(v, u, step+val); } } int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= m; i++) { scanf("%d %d %d %c", &u, &v, &val, &ch); G[u].push_back(P(v, val)); G[v].push_back(P(u,val)); } dfs(1, 0, 0); dfs(s, 0, 0); printf("%d", ans); }