Algorithm used : DFS
/* Name: How Many Dependencies Copyright: golammostaeen.wordpress.com Author: Golam Mostaeen Date: 22/11/12 22:37 Description: Simple DFS... */ #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <cstdio> using namespace std; #define MAX 105 int adj[MAX][MAX]; void init(int N){ for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++)adj[i][j] = 0; } } int nodeColor[MAX]; void DFS_VISIT(int source, int N){ nodeColor=1; for(int i=1;i<=N;i++){ if(nodeColor[i]==0&&i!=source&&adj[i]==1)DFS_VISIT(i,N); } nodeColor = 2; } int DFS(int source, int N){ for(int i=1;i<=N;i++)nodeColor[i] = 0; for(int i=1;i<=N;i++){ if(i!=source && adj[i]==1&&nodeColor[i]==0)DFS_VISIT(i,N); } int counter = 0; for(int i=1;i<=N;i++)if(nodeColor[i]==2)counter++; return counter; } int main(){ freopen("inMe.txt","r",stdin); freopen("outMe.txt","w",stdout); int N; while(scanf("%d",&N)==1 && N!=0){ init(N); for(int i=1;i<=N;i++){ int m;cin>>m; for(int j=1;j<=m;j++){ int h;cin>>h;adj[i][h]=1; } } int maxD = -1; int ID = 0; for(int i=1;i<=N;i++){ int hold=DFS(i,N); if(hold>maxD){ maxD = hold; ID = i; } } cout<<ID<<endl; } return 0; }