struct T
{
int v,next;
}E[N*N];
struct TT
{
int head;
}V[N];
bool used[N];
bool dfs(int u)
{
if(used[u])
return true;
used[u] = true;
for(int i=V[u].head;i!=NULL;i=E[i].next)
if(dfs(E[i].v))
return true;
used[u] = false;
return false;
}
int main()
{
for(int i=1;i<=n;i++)
{
used[i] = true;
for(int j=V[j].head;j!=NULL;j=E[j].next)
if(dfs(E[j].u)); //Have circle
used[i] = false;
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bool dfs(int u)
{
vis[u] = true;
inS[u] = true;
for(int v=1;v<=n;v++)
if(g[u][v])
{
if(inS[v] || !vis[v] && dfs(v))
return true;
}
inS[u] = false;
return false;
}