2021-PTA总决赛-L2-2 病毒溯源(DFS)

思路:

这题的唯一可能能被看作是陷阱的就是根节点不是0,由于不会有任何节点指向根节点,所以可以通过全部求和,再减去有被指向的节点的值,就是根节点了,剩下的就是单纯的DFS。

AcCode:

#include<bits/stdc++.h>
using namespace std;
vector<int> t[10010];
vector<int> ans, path;
void dfs(int rt){
    if(t[rt].size() == 0){
        //vector重载过等于号,所以直接比较即可
        if(path.size() > ans.size() ||(path < ans && path.size() == ans.size())) ans = path;
        return ;
    }
    
    for(int i = 0; i < t[rt].size(); i++){
        path.push_back(t[rt][i]);
        dfs(t[rt][i]);
        path.pop_back();
    }
    
}

int main(){
    int N, rt;
    cin >> N;
    rt = (0 + N - 1) * N / 2;
    for(int i = 0; i < N; i++){
        int K;
        cin >> K;
        for(int j = 0; j < K; j++){
            int v;
            cin >> v;
            rt -= v;
            t[i].push_back(v);
        }
    }
    dfs(rt);
    cout << ans.size() + 1 << endl << rt;
    for(int i = 0; i < ans.size(); i++){
        cout << " " << ans[i];
    }
    return 0;
}
posted @ 2025-04-08 17:01  Yuhhhhh  阅读(20)  评论(0)    收藏  举报