#include <stdio.h>
#include <stdlib.h>
typedef struct node* link;
typedef struct node
{
int num; //연결된 노드 번호
link next; //연결리스트 구현을 위한 포인터
} node;
link *arr, *visit; //arr = 연결리스트, visit = 방문여부
int ans = 0; //제출 정답
link createN(link head, int a) //연결리스트 생성 함수
{
link c = head, temp = NULL;
temp
= (link
)malloc(sizeof(node
));
temp->num = a;
temp->next = NULL;
if (!head)
{
head = temp;
return head;
}
while (c->next) c = c->next;
c->next = temp;
return head;
}
void go(link head) //탐색 함수(특 : 재귀)
{
while (head)
{
if (!visit[head->num])
{
ans++;
visit[head->num] = 1; //방문 여부 온(on이라는 뜻 ㅎ)
go(arr[head->num]);
}
head = head->next;
}
}
int main()
{
int i, cnt, cnum, tmp1, tmp2;
arr
= (link
)malloc(sizeof(node
) * (cnum
+ 1)); //숫자 안 헷갈리기 위한 몸부림 visit
= (int*)calloc(cnum
+ 1, sizeof(int));
for (i = 1; i <= cnum; i++) arr[i] = NULL; //초기화
for (i = 0; i < cnt; i++)
{
scanf("%d %d", &tmp1
, &tmp2
);
arr[tmp1] = createN(arr[tmp1], tmp2); //양방향 생성을 위해 서로 쏴주기
arr[tmp2] = createN(arr[tmp2], tmp1); //양방향 생성을 위해 서로 쏴주기
}
visit[1] = 1;
go(arr[1]);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUqIGxpbms7CnR5cGVkZWYgc3RydWN0IG5vZGUKewoJaW50IG51bTsgLy/sl7DqsrDrkJwg64W465OcIOuyiO2YuAoJbGluayBuZXh0OyAvL+yXsOqysOumrOyKpO2KuCDqtaztmITsnYQg7JyE7ZWcIO2PrOyduO2EsAp9IG5vZGU7CgpsaW5rICphcnIsICp2aXNpdDsgLy9hcnIgPSDsl7DqsrDrpqzsiqTtirgsIHZpc2l0ID0g67Cp66y47Jes67aACmludCBhbnMgPSAwOyAvL+ygnOy2nCDsoJXri7UKCmxpbmsgY3JlYXRlTihsaW5rIGhlYWQsIGludCBhKSAvL+yXsOqysOumrOyKpO2KuCDsg53shLEg7ZWo7IiYCnsKCWxpbmsgYyA9IGhlYWQsIHRlbXAgPSBOVUxMOwoKCXRlbXAgPSAobGluayltYWxsb2Moc2l6ZW9mKG5vZGUpKTsKCgl0ZW1wLT5udW0gPSBhOwoJdGVtcC0+bmV4dCA9IE5VTEw7CgoJaWYgKCFoZWFkKQoJewoJCWhlYWQgPSB0ZW1wOwoKCQlyZXR1cm4gaGVhZDsKCX0KCgl3aGlsZSAoYy0+bmV4dCkgYyA9IGMtPm5leHQ7CgoJYy0+bmV4dCA9IHRlbXA7CgoJcmV0dXJuIGhlYWQ7Cn0KCnZvaWQgZ28obGluayBoZWFkKSAvL+2DkOyDiSDtlajsiJgo7Yq5IDog7J6s6reAKQp7Cgl3aGlsZSAoaGVhZCkKCXsKCQlpZiAoIXZpc2l0W2hlYWQtPm51bV0pCgkJewoJCQlhbnMrKzsKCQkJdmlzaXRbaGVhZC0+bnVtXSA9IDE7IC8v67Cp66y4IOyXrOu2gCDsmKgob27snbTrnbzripQg65y7IOOFjikKCQkJZ28oYXJyW2hlYWQtPm51bV0pOwoJCX0KCgkJaGVhZCA9IGhlYWQtPm5leHQ7Cgl9Cn0KCmludCBtYWluKCkKewoJaW50IGksIGNudCwgY251bSwgdG1wMSwgdG1wMjsKCglzY2FuZigiJWQiLCAmY251bSk7CgoJYXJyID0gKGxpbmspbWFsbG9jKHNpemVvZihub2RlKSAqIChjbnVtICsgMSkpOyAvL+yIq+yekCDslYgg7Ze36rCI66as6riwIOychO2VnCDrqrjrtoDrprwKCXZpc2l0ID0gKGludCopY2FsbG9jKGNudW0gKyAxLCBzaXplb2YoaW50KSk7CgoJZm9yIChpID0gMTsgaSA8PSBjbnVtOyBpKyspIGFycltpXSA9IE5VTEw7IC8v7LSI6riw7ZmUCgoJc2NhbmYoIiVkIiwgJmNudCk7CgoJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQoJewoJCXNjYW5mKCIlZCAlZCIsICZ0bXAxLCAmdG1wMik7CgoJCWFyclt0bXAxXSA9IGNyZWF0ZU4oYXJyW3RtcDFdLCB0bXAyKTsgLy/slpHrsKntlqUg7IOd7ISx7J2EIOychO2VtCDshJzroZwg7I+07KO86riwCgkJYXJyW3RtcDJdID0gY3JlYXRlTihhcnJbdG1wMl0sIHRtcDEpOyAvL+yWkeuwqe2WpSDsg53shLHsnYQg7JyE7ZW0IOyEnOuhnCDsj7Tso7zquLAKCX0KCQoJdmlzaXRbMV0gPSAxOwoJZ28oYXJyWzFdKTsKCglwcmludGYoIiVkXG4iLCBhbnMpOwoKCXJldHVybiAwOwp9