dfs(递归)
#include<iostream>
#define N 100
#define white 0
#define gray 1
#define black 2
using namespace std;
int n,M[N][N];
int color[N],d[N],f[N],tt;
void dfsvisit(int u){
int v;
color[u]=gray;
d[u]=++tt;
for(v=0;v<n;v++){
if(M[u][v]==0&&color[v]==white){
dfsvisit[v];
}
}
}
void dfs(){
int u;
for(u=0;u<n;u++)
color[u]=white;
tt=0;
for(u=0;u<n;u++){
if(color[u]==white)dfsvisit(u);
}
for(u=0;u<n;u++){
cout<<u+1<<d[u]<<f[u]<<endl;
}
}
int main(){
int u,v,k,i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
M[i][j]=0;
}
}
for(i=0;i<n;i++){
cin>>u>>k;
u--;
for(j=0;j<n;j++){
cin>>v;
v--;
M[u][v]=1;
}
}
dfs();
return 0;
}