inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

13244 tree 문제 질문

265

bunny

작성한 질문수 19

0

안녕하세요 13244 tree 문제 풀다가 질문 생겨서 글 남깁니다.

http://boj.kr/c294aa7ee185421d8f6ccb6ff804b4b0

저는 위와 같이 코드를 작성했는데, 틀렸다고 나와서요

제가 놓친 반례에는 어떤 것이 있을 수 있나요?

저는 엣지 노드 갯수 비교하는 부분이 없고, 이미 엣지가 있는지 체크하고 추가하였습니다.

코테 준비 같이 해요! C++

답변 2

0

bunny

트리는 노드와 노드 사이 간선이 하나 인 것으로 알고 있습니다.

//이게 왜 필요하죠? 라고 물으신 부분은

예제 입력 1번의 두 번째 테스트 케이스가 노드1 과 노드2 사이 간선이 2개이고 그 결과 그래프가 되어서

이미 노드와 노드 사이 간선이 있다면 트리가 불가능 하다고 작성한 로직입니다.

이러한 로직이 전체 코드를 놓고 봤을 때 m=n-1을 의미 하는 것 아닌가요?

0

큰돌

음 근데 이렇게 오는 경우 체크가 불가능하죠. 1 2 2 1 이렇게 들어오는 경우라면 이미 양방향 간선이 만들어졌기 때문에 있다고 표기가 되서 해당 부분 if문에 빠지게 됩니다.

0

큰돌

음..

엣지가 있는 체크한다. 이 부분 설명 부탁드려도 될까요?

그리고 주석달았습니다. 확인부탁드려요

#include <iostream>
#include <vector>
#include <memory.h>
#include <algorithm>

using namespace std;

int T,n,m,possible;
int a, b;
vector<int> adj[1004];
int visited[1004];

void dfs(int here)
{
	visited[here] = 1;

	for (int there : adj[here])
	{
		if (visited[there] == 0)
		{
			dfs(there);
		}
	}
}


int main()
{
	cin >> T;

	while (T--)
	{
		// initialize good 
		possible = 1;
		memset(visited, 0, sizeof(visited));
		for (int i = 0; i < 1004; i++)
		{
			adj[i].clear();
		}

		cin >> n;
		cin >> m;

		// make map
		for(int i = 0; i < m; i++)
		{
			cin >> a >> b;
			//이게 왜 필요하죠? 
			auto it = find(adj[a].begin(), adj[a].end(), b);
			if (it != adj[a].end())
			{
				possible = 0;
				break;
			}
			else
			{
				adj[a].push_back(b);
				adj[b].push_back(a);
			}
		}

		//dfs 굿 
		dfs(1);

		// check
		for (int i = 1; i <= n; i++)
		{
			if (visited[i] == 0)
			{
				possible = 0;
				break;
			}
		}
		//m = n - 1을 확인하는 부분이 없네요? 
		// print
		if (possible == 1) cout << "tree" << "\n";
		else cout << "graph" << "\n";
	}

	return 0;
}

1-E질문입니다!

0

508

2

3-L 틀린 부분 피드백 부탁드립니다.

0

811

2

1-A문제 순열재귀함수 질문입니다.

0

376

1

1-A 일곱난쟁이문제입니다

0

451

1

문제 풀 때 방향성에 대해

0

793

1

맥에서 vs code로 실행 관련 질문입니다

0

515

1

17071번 메모리 초과

0

381

1

1-C질문입니다!

0

411

2

2-B BFS 시간초과질문

0

622

2

1-O 13번 라인

0

434

1

6-J 놀이공원 문제 질문

0

375

1

구현관련 질문

0

478

1

강의 교안

0

313

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

541

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

531

1

1-K

0

468

2

3-G번 질문있습니다.

1

464

3

3-C 실행 시간 질문드립니다.

0

489

1

4-A 문제 풀이 질문있습니다.

0

586

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

430

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

329

1

3-O go 함수 질문 드립니다.

1

437

2

4-A 출력 질문

0

298

1

1주차 1-O 질문드립니다

0

250

1