我的主要逻辑是这样写的,只能过16,不知道哪里错了 ```cpp int dfs(int u, int tog) { // 有一个或者多个孩子,当前节点就找到最长链长度 vector<int> pls; pls.resize(0); for (int to : edges[u]) { if (tog &amp;&amp; a[to] >= a[u] || !tog &amp;&amp; a[to] <= a[u]) { pls.push_back(dfs(to, tog)); } } // size == 0 \\ 没有当前tog可用孩子确实应该这里处理 if (!pls.size()) return 1; sort(pls.begin(), pls.end(), greater<int>{}); // cout << 'u' << u << '\n'; // for (int i : pls) cout << i << ' '; // cout << '\n'; if (pls.size() >= 2) { maxChainLen = max(maxChainLen, pls[0] + pls[1] + 1); } // size == 1 return pls[0] + 1; } ```