题目:

思路分析:
一个简单的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]<<" ";
}
}
250



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



