pta L2-031 深入虎穴 (25 分)

越发感觉到自己的菜,大体的思路会写,但总是有一些卡住的地方,归根结底还是题做的少了。

#include<iostream>
#include<cstring>

using namespace std;

const int N = 1e5+10;
int e[N],ne[N],idx,h[N];
int n;
bool st[N],ent[N];
int dist; // 最短距离
int res; // 门的编号

void add(int a, int b){ // 记录从a扇门可以到达哪扇门
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx++;
}

void dfs(int s,int len){
    st[s] = true;
//     cout << "编号:" << s << " " << "距离:" << len << endl;
    if(h[s] == -1){
//         puts("进入");
        if(len > dist) dist = len,res = s;
        return;
    }
    for(int i = h[s]; i != -1; i = ne[i]){
        if(!st[e[i]]) st[e[i]] = true,dfs(e[i],len+1);
    }
}

int main(){
    cin >> n;
    memset(h,-1,sizeof h);
    for(int i = 1; i <= n; i++) {
        int k;
        cin >> k;
        while(k--){
            int x;
            cin >> x;
            add(i,x);
            ent[x] = true; // 有门通向他,说明它不是入口
        }
    }
    for(int i = 1; i <= n; i++){
        if(!ent[i]){
            dfs(i,1);
        } 
    }
    cout << res << endl;
    return 0;
}
上一篇:SPSS 量表和问卷编制的基本步骤【SPSS 031期】


下一篇:R语言逻辑回归分析连续变量和分类变量之间的“相关性“