250729
#include<stdio.h>
void search(int xc, int yc);
int arr[102][102] = {{0}};
int n;
int main() {
int x,y,k, x1,x2,y1,y2;
int cnt=0;
int answer[1000] = {0}, answerIdx=0, temp;
scanf("%d %d %d", &y, &x, &k);
for (int i=0; i<x+1; i++) { //가로
arr[0][i] = 1;
arr[y+1][i] = 1;
}
for (int i=0; i<y+1; i++) { //세로
arr[i][0] = 1;
arr[i][x+1] = 1;
}
for (int i=0; i<k; i++) {
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
// 2번쨰 x,y는 -1하기
for (int j=y1+1; j<y2+1; j++) {
for (int l=x1+1; l<x2+1; l++) {
arr[j][l] = 1;
}
}
}
for (int i=1; i<y+1; i++) {
for (int j=1; j<x+1; j++) {
if (arr[i][j]!=1) {
n=0;
cnt++;
search(i,j);
answer[answerIdx] = n;
answerIdx++;
}
}
}
// 넓이 오름차순으로 만들기
for (int i=0; i<answerIdx; i++) {
for (int l=i+1; l<answerIdx; l++) {
if (answer[i]>answer[l]) {
temp = answer[i];
answer[i] = answer[l];
answer[l] = temp;
}
}
}
printf("%d\n", cnt);
for (int i=0; i<answerIdx; i++) {
printf("%d ", answer[i]);
}
//
// for (int j=0; j<y+2; j++) {
// for (int l=0; l<x+2; l++) {
// printf("%d", arr[j][l]);
// }
// printf("\n");
// }
//
return 0;
}
void search(int xc, int yc) {
if (arr[xc][yc]==1) {
return;
}
arr[xc][yc] = 1;
//printf("x,y 좌표:%d %d\n", xc, yc);
n++;
search(xc,yc+1); // 아래
search(xc+1,yc); // 오른쪽
search(xc-1,yc); // 왼쪽
search(xc,yc-1); // 위, 애는 필요 없을 거 같긴한데
// return;
}
#include<stdio.h>
int main() {
int n, x,y;
// int arr[100002][100002] = {{0}};
// 100000
int arr[100002] = {0};
scanf("%d" ,&n);
for (int i=0; i<n-1; i++) {
scanf("%d %d", &x, &y);
// 1 4 / 2 4
// 부모노드는 1이고 자식 노드는 2로 하자
// y축: 자식 노드, x축 인덱스: 부모노드
// 부모 자식 형태로 들어오는지 체크하자
// 부모 자식처럼 입력된 경우
if (arr[x]!=0) {
arr[y] = x;
//arr[y] = 1;
//printf("부모 자식\n");
}
// 자식 부모처럼 입력된 경우
else if (arr[y]!=0) {
arr[x] = y;
// arr[x] = 1;
// printf("자식 부모\n");
}
else {
// printf("초기\n");
arr[x] = y;
arr[x] = 1;
arr[y] = 1;
}
}
for (int i=2; i<=n; i++) {
printf("%d\n", arr[i]);
}
return 0;
}




