#include<iostream> using namespace std; int color[100]; int father[100]; int b[100];//存储开始探查时间 int f[100];//存储结束探查时间 int time; struct node{ int m; node* next; node(int n,node* p){ m=n; next=p; } }; struct head{ int n; node* adj; }Head[100]; void Create(int a,int b) { node* p=Head[a].adj; if(Head[a].adj==NULL) Head[a].adj=new node(b,NULL); else { while(p->next!=NULL) { p=p->next; } p->next=new node(b,NULL); } } void DFS_visit(int k) { // cout<<"OK1"<<endl; color[k]=1; time=time+1; b[k]=time; node*p=Head[k].adj; //cout<<"OK2"<<endl; while(p!=NULL) { if(color[p->m]==0) { father[p->m]=k; DFS_visit(p->m); } p=p->next; } color[k]=2; time=time+1; f[k]=time; //cout<<"OK3"<<endl; } void DFS(int n) { for(int i=1;i<=n;i++)//初始化,结点全是白色,父节点为-1 { color[i]=0; father[i]=-1; } time=0; // cout<<"OKa"<<endl; for(int i=1;i<=n;i++) { // cout<<"OKb"<<endl; if(color[i]==0) DFS_visit(i); } } void Display(int n) { for(int i=1;i<=n;i++) cout<<i<<" "<<b[i]<<"/"<<f[i]<<endl; for(int i=1;i<=n;i++) cout<<i<<" father "<<father[i]<<endl; } int main() { int n,l; while(cin>>n>>l){//n表示图中点的个数,l表示图中边的个数 for(int i=1;i<=n;i++) { Head[i].n=i; Head[i].adj=NULL; } int a,b; for(int i=1;i<=l;i++) { cin>>a>>b; Create(a,b); } //cout<<"OK0"<<endl; DFS(n); Display(n); } return 0; } /*10 14 1 3 1 7 1 4 3 6 6 7 7 3 4 8 8 9 9 8 4 10 10 1 2 10 2 5 5 10 */