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;
}
시간을 조금더 줄일수 있는 방법이 있을까요?