D. Cycle in Graph_找环
D. Cycle in Graph_找环
题目大意
给一个图,每个点至少和其他k个点连接,现要求找出一个含有至少k+1个点的环。
思路和代码
每个点都和其他至少k个点连接,图十分稠密。所以从任意点出发都可以搜索到题目要求的环。
int n , m , k ;
int path[N] , cnt ;
int idx[N] ;
vct<int> eg[N] ;
bool f ;
vct<int> ans ;
void dfs(int now , int pre){
path[ ++ cnt ] = now ;
idx[now] = cnt ;
for(int nxt : eg[now]){
if(f) return ;
if(nxt == pre) continue ;
if(idx[nxt] > 0){
int ln = cnt - idx[nxt] + 1 ;
if(ln > k){
f = 1 ;
int i = cnt ;
while(i >= 1 && path[i] != nxt)
ans.pb(path[i -- ]) ;
ans.pb(nxt) ;
return ;
}
continue ;
}
dfs(nxt , now) ;
}
cnt -- ;
idx[now] = 0 ;
}
void solve(){
cin >> n >> m >> k ;
rep(i , 1 , m){
int u , v ;
cin >> u >> v ;
eg[u].pb(v) ;
eg[v].pb(u) ;
}
dfs(1 , 0) ;
cout << ans.size() << "\n" ;
for(int x : ans) cout << x << " " ;
}
小结
模板题