Тема: Поиск цикла
Требуется в ориентированном графе найти цикл и вывести его (1<=n<=100000;1<=m<=100000)
Данный код получает TLE, даже когда его переделал под пример из статьи http://e-maxx.ru/algo/finding_cycle
#include <stdio.h>
#include <vector>
using namespace std;
vector <int> g[100001];
int color[100001],p[100001];
int f=-1,s=-1;
bool dfs(int u) {
color[u]=1;
for (int i=0;i<g[u].size();i++)
if (color[g[u][i]]==0) {p[g[u][i]]=u; if ( dfs(g[u][i]) ) return true;} else
if (color[g[u][i]]==1) {f=u; s=g[u][i]; p[s]=u; return true; }
color[u]=2;
return false;
}
int main() {
int n,m;
freopen("cycle.in","r",stdin);
freopen("cycle.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
}
for (int i=1;i<=n;i++)
if (color[i]==0)
if (dfs(i)) break;
if (s==-1) printf("NO"); else
{ vector <int> res;
res.push_back(f);
int v=p[f];
while (v!=s)
{ res.push_back(v);
v=p[v]; }
res.push_back(s);
printf("YES\n");
for (int i=res.size()-1;i>=0;i--) printf("%d ",res[i]);
}
return 0;
}
Прошу указать на мою ошибку!
Спасибо.