struct node...{ int id; int w; node* next;};struct arr_node...{ int id; node* head;};arr_node a[N];int color[N],d[N],f[N],from[N],time;void Init()...{ int i; for(i=0;i<n;i++)...{ color[i]=0; // 0:white 1:gray 2:black from[i]=-1; }}void DFS()...{ Init(); int i; time=0; for(i=0;i<n;i++)...{ if(color[i]==0) DFS_visit(int id); }}void DFS_visit(int id)...{ color[id]=1; d[id]=++time; node* p=arr_node[id].head; while(NULL!=p)...{ if( 0==color[p->id] )...{ DFS_visit(p->id); from[p->id]=id; } p=p->next; } color[id]=2; f[id]=++time;}// cost 16'