cf#161-D-Cycle in Graph- dfs
来源:互联网 发布:cms始源勇者王 编辑:程序博客网 时间:2024/05/22 17:11
题意:给一个无向图,存在环,保证每个node至少与k个点相连,让你找出一个 长度》k+1的环。。。
把1作为根,dfs搜,当遇到一个没访问过的节点V则递归进入,否则判断该节点是否是直接父亲,如果不是的话,说明存在一个环,X到V,因为每次往下走的都是没访问过的节点,所以X到V这条链上的点都是在同一分支,因此换的长度就是dp[v]-dp[x]+1,如果大于k+1直接输出答案,否则继续搜索、
本来挺简单的题, 结果我想到了一个 环不在同一分支的情况(是不存在这种情况的)。。一直在处理这个情况。。。这种情况下要输出所有的点还得再搜。。。总之自己给自己找麻烦。。。。
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <map>#include <set>#include <vector>#include <iostream>using namespace std;const double pi=acos(-1.0);double eps=0.000001; int dp[100005];__int64 min(__int64 a,__int64 b){return a<b?a:b;}__int64 max(__int64 a,__int64 b){return a>b?a:b;}int n,m,k;vector<int > mp[100005];int vis[100005]; int flag=0; int ans[100005]; int ok=0;int cun=0;int tmp[100005]; void dfs(int x,int cur){vis[x]=1;dp[x]=cur;int i;for (i=0;i<mp[x].size();i++){ int v=mp[x][i];if (vis[v]){if (v==fa[x]) continue;else { int len=cur-dp[v]+1; if (len>=k+1){ while(tmp[ok]!=v){ans[++cun]=tmp[ok];ok--;}ans[++cun]=tmp[ok];flag=1;return ;}}continue;} tmp[++ok]=v;dfs(v,cur+1);if (flag) return ;ok--;}} int main(){ int x,y,i,j;cin>>n>>m>>k;for (i=1;i<=m;i++){scanf("%d%d",&x,&y); mp[x].push_back(y); mp[y].push_back(x);} tmp[++ok]=1;dfs(1,1); printf("%d\n",cun); for (i=cun;i>=1;i--){if (i!=cun) printf(" ");printf("%d",ans[i]);}printf("\n");return 0;}
0 0
- cf#161-D-Cycle in Graph- dfs
- Codeforces 263D Cycle in Graph【Dfs】
- Codeforces Round #161 (Div. 2)-D. Cycle in Graph
- Codeforces 263 C. Circle of Numbers D. Cycle in Graph (dfs一般难度)
- 263D - Cycle in Graph 图论 YY
- Codeforces 263 D. Cycle in Graph 环
- Codeforces 263 D. Cycle in Graph
- contest: Codeforces Round #161 (Div. 2), problem: (D) Cycle in Graph 图论
- Cycle in Graph (coder)
- Codeforces Round #161 (Div. 2) D. Cycle in Graph(无向图中找指定长度的简单环)
- CF 598D. Igor In the Museum【DFS】
- CF 21D Traveling Graph
- cf-Round #214 (Div. 2)-D-Dima and Trap Graph-dfs+二分
- Graph Cutting CF 405E DFS
- CF-161D Distance in Tree
- cf-557D Vitaly and Cycle
- Detect cycle in an undirected graph
- CF D. Giving Awards(dfs)
- 二叉树遍历算法总结
- ZOJ 3777Problem Arrangement(状压DP)
- C++向量容器vector的使用
- 《基于子空间的人脸识别》文献笔记
- 如何遍历memcache
- cf#161-D-Cycle in Graph- dfs
- NYOJ90-整数划分,经典递归思想~~
- ssh服务器
- PHP memcache实现消息队列实例
- RDD动态转换成DataFrame
- boost基础——随机数生成器
- (语法)一个求大小的程序分析
- PHP共享内存实现的消息队列
- Android群英传笔记——第四章:ListView使用技巧