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 << " " ;
	
}

小结

模板题

posted @   tyrii  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示