박오이님
무미건조한 개발자
박오이님
전체 방문자
오늘
어제
  • 뭥미 (101)
    • 프로젝트 (8)
      • 자가 보호 (3)
      • 주식 시장 분석 도구 (5)
    • 보안 (7)
      • 개론 (2)
      • 웹 (2)
      • 시스템 (2)
    • 개발 (69)
      • C++ (12)
      • Win32 (7)
      • MFC (2)
      • 자료구조 (8)
      • 알고리즘 (22)
      • 백준 (9)
      • 프로그래머스 (4)
      • LeetCode (0)
      • 개발자 면접 준비 (4)
      • OpenGL (1)
    • 서적 (13)
      • Effective C++ (9)
      • Effective Modern C++ (4)
    • 관심사 (4)
      • 재테크 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 플로이드와샬알고리즘 #최단경로 #백준 #알고리즘 #개발 #C #C++
  • 안경잡이개발자
  • 개발
  • 크루스칼알고리즘
  • 윈도우프로그래밍
  • jsoncpp
  • DFS #BFS #알고리즘 #프로그래밍 #코딩테스트 #코딩 #C++ #C
  • C++
  • 시스템프로그래밍
  • 백준 #알고리즘 #플로이드와샬 #DFS #BFS #C #C++
  • 알고리즘
  • 윈도우시스템프로그래밍
  • 프로세스메모리
  • 나동빈
  • 나동빈 #알고리즘 #동빈나
  • 동빈나
  • 에라토스테네스의 체 #C #C++ #개발 #알고리즘 #BFS #DFS #백준 #백준알고리즘
  • 최소간선비용
  • 합집합찾기
  • std
  • CPP
  • C
  • 윈도우개발자
  • EffectiveC++
  • JSON
  • 코딩컨벤션
  • 에라토스테네스의 체 #알고리즘 #개발 #C #C++ #소수 #소수판별
  • vcpkg
  • 윈도우
  • Functional

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
박오이님

무미건조한 개발자

개발/백준

백준 9466번: 텀 프로젝트

2019. 9. 26. 20:46

문제링크: https://www.acmicpc.net/problem/9466

 

9466번: 텀 프로젝트

문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r=

www.acmicpc.net

처음에는 그냥 단순 DFS인줄 알았다.

순환인 그래프를 찾는 DFS였다. 

BOOL 배열 변수 하나 선언해서 진행했다. (사실, 다른 블로그의 도움을 받았다.)

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int narr[1000001];
bool bVisited[1000001];
bool bBelong[1000001];

int T, n;
int nMember;

void DFS(int nStart)
{
	bVisited[nStart] = true;

	int next = narr[nStart];

	if (bVisited[next])
	{
		if (!bBelong[next])
		{
			for (int i = next; nStart != i; i = narr[i])
			{
				nMember++;
			}
			nMember++;
		}
	}
	else
	{
		DFS(next);
	}

	bBelong[nStart] = true;
}
int main(void)
{
	cin >> T;

	// Test Case 수 만큼 증가
	for (int i = 0; i < T; i++)
	{
		cin >> n;

		// 초기화 과정
		memset(bVisited, false, sizeof(bVisited));
		memset(bBelong, false, sizeof(bBelong));
		memset(narr, 0, sizeof(narr));
		nMember = 0;

		// n 입력
		for (int j = 1; j <= n; j++)
		{
			cin >> narr[j];
		}

		for (int j = 1; j <= n; j++)
		{
			if (!bVisited[j])
			{
				DFS(j);
			}
		}
		
 		cout << n - nMember <<endl;
	}
	
	return 0;
}

 

저작자표시 (새창열림)

'개발 > 백준' 카테고리의 다른 글

백준 13460번: 구슬 탈출 2  (0) 2019.10.14
백준 10451번: 순열 사이클  (0) 2019.09.26
백준 1325번: 효율적인 해킹  (0) 2019.09.24
백준 1963번: 소수 경로  (0) 2019.09.02
백준 1389번: 케빈 베이컨의 6단계 법칙  (0) 2019.09.01
    '개발/백준' 카테고리의 다른 글
    • 백준 13460번: 구슬 탈출 2
    • 백준 10451번: 순열 사이클
    • 백준 1325번: 효율적인 해킹
    • 백준 1963번: 소수 경로
    박오이님
    박오이님
    긍정도 아니고 부정도 아닌 0

    티스토리툴바