-
7465. 창용 마을 무리의 개수SWexpertAcademy 2019. 7. 12. 03:15
#include<cstdio> #include<iostream> #include<vector> #include<queue> #include<utility> using namespace std; int num; int a[101][101]; bool d[101][101]; void clean(int n) {//전역변수 초기화.. 쓴거만 초기화하자 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { a[i][j] = 0; d[i][j] = false; } } } int main() { scanf("%d", &num); int non = 1; while (num--) { int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < m; i++) { int xx, yy; scanf("%d %d", &xx, &yy); a[xx][yy] = 1; a[yy][xx] = 1; } int r = 0; int p = 0; for (int i = 1; i <= n; i++){ // 서로 Link되지 않은것 존재가능함 p = 0; for (int j = 1; j <= n; j++) { p++; if (a[i][j] == 1) p = 0; } if (p >= n) r++; } for (int i = 1; i <= n; i++) {//BFS파트, 인접리스튼 아직 안익숙해서 그냥..인접행렬 queue<pair<int,int>> q; for (int j = 1; j <= n; j++) { if (a[i][j] == 1 && d[i][j] == false) { q.push(make_pair(i, j)); d[i][j] = true; } } while (!q.empty()) { int x = q.front().second; int y = q.front().first; d[x][y] = true; q.pop(); for (int j = 1; j <= n; j++) { if (a[x][j] == 1 && d[x][j] == false) { q.push(make_pair(x, j)); d[x][j] = true; } } if (q.empty()) r++; } } printf("#%d %d\n", non, r);//값 구하기 clean(n);//초기화 non++; } return 0; }
창용마을의 무리개수 문제는 문제자체는 쉬운데, 서로 연결되지 않은 부분에 대해선 실수할 가능성이 높은듯
쉬운 문제 이지만, 이런 간단한 함정에 빠지면 틀리기 쉬움
'SWexpertAcademy' 카테고리의 다른 글
5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) 2019.07.15 1486. 장훈이의 높은 선반 (0) 2019.07.15 1221. [S/W 문제해결 기본] 5일차 - GNS (0) 2019.07.15 7733. 치즈 도둑 (0) 2019.07.14 7965. 퀴즈 (0) 2019.07.12