1 条题解

  • 1
    @ 2025-7-28 17:45:07

    其实不难发现,此题要么无解,要么只有一个解。不妨假设存在第二个点成立,那么其他所有点都可到达此点,但边是单向的,而且是个树,路径唯一,那么第二个点不可能达到第一个点,显然矛盾只有唯一解。因此直接dfs任意一个点,找到他的根,下面围绕这个点dfs,只要出现遍历终点不等于这个点,那么无解。否则有解,直接输出此点即可。 #include<bits/stdc++.h> using namespace std; vector<vector>grid(110); int dfs(int n) { if (grid[n].empty())return n; else return dfs(grid[n][0]); } int main() { int n; int a, b; cin >> n; for (int i=1;i<n;i++) { cin >> a >> b; grid[a].push_back(b); } int point=dfs(1); for (int i = 1; i <= n; i++) { if (dfs(i) != point) { cout << -1 << endl; return 0; } } cout << point << endl; return 0; }

    信息

    ID
    849
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    51
    已通过
    18
    上传者