https://www.acmicpc.net/problem/1325


#include <stdio.h>

#include <string.h>

#include <stdlib.h>


typedef struct _node

{

    struct _node *next;

    int end;

}Node;


int bfs(int v);


int N, M, V;

Node com[10005];

int visit[10005];

int queue[1000005];


int main(void)

{

    int i, j, start, end, total[10005], temp, max = -1;

    Node *newnode;

    scanf(" %d %d", &N, &V);

    

    for(i = 1; i <= N; i++)

    {

        com[i].end = 0;

        com[i].next = NULL;

    }

    

    for(i = 0; i < V; i++)

    {

        scanf(" %d %d", &end, &start);

        

        newnode = (Node *)malloc(sizeof(Node));

        newnode->end = end;            

        newnode->next = com[start].next; 

        

        com[start].next = newnode; 

        com[start].end++;            

    }

    

    for(i = 1; i <= N; i++)

    {    

        memset(visit, 0, sizeof(visit));

        

//        for(j=1;j<=N;j++)

//        {

//            visit[j]=0;

//        }

        

        total[i] = bfs(i);

    }

    

    for(i = 1; i <= N; i++)

    {

        if(max < total[i])

        {

            max = total[i];

        }

    }

    for(i = 1; i <= N; i++)

    {

        if(max == total[i])

        {

            printf("%d ",i);

        }

    }

    

    return 0;

}


int bfs(int v)

{

    int front = 0, rear = 0;

    int i, temp, count = 0;

    

    queue[rear++] = v;

    visit[v] = 1;

    

    while(front < rear)

    {

        int now = queue[front++];

//        printf("%d ", now);

        Node *cur = com[now].next;

        

        for(i = 0; i < com[now].end; i++)

        {

            if(visit[cur->end] == 0)    

            {

                visit[cur->end] = 1;

                queue[rear++] = cur->end;

                count++;

            }

            

            cur = cur->next;

        }

    }

//    printf("\n");

    return count;

}


시간을 조금더 줄일수 있는 방법이 있을까요?