题目:

思路分析:
一个简单的dfs搜索的题目+路径记录
要字典序列最小那么在插入时候进行排序 第一次dfs搜索到的最长路径就是答案了!
代码实现:
const int MAX=1e4+10;
vector<int>v[MAX];
int n;
vector<int>ans;
void dfs(int pos,vector<int>&p){
if(ans.size()<p.size()){
ans.clear();
ans=p;
}
for(int i=0;i<v[pos].size();i++){
p.push_back(v[pos][i]);
dfs(v[pos][i],p);
p.pop_back();
}
}
int vis[MAX];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int k;
cin>>k;
while (k--) {
int x;
cin>>x;
vis[x]=1;
v[i].push_back(x);
}
if(v[i].size()){
sort(v[i].begin(),v[i].end());
}
}
int f;
for(int i=0;i<n;i++){
if(!vis[i])
f=i;
}
// cout<<"f "<<f<<endl;
vector<int>p;
p.push_back(f);
dfs(f,p);
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++){
if(i==ans.size()-1) cout<<ans[i];
else cout<<ans[i]<<" ";
}
}
该博客主要讨论了一种利用深度优先搜索(DFS)寻找图中最长路径的问题。作者通过代码实现展示了如何在找到最长路径时同时记录路径,并强调了在插入节点时进行排序的重要性,以确保找到的是最小字典序的最长路径。代码中首先读取图的结构,然后进行DFS遍历,最终输出最长路径的长度和路径本身。
190

被折叠的 条评论
为什么被折叠?



