2015 인하대학교 프로그래밍 경시대회 G번
처음에는 BFS를 돌면서 다시 방문하는 정점이 있는 경우 NO CYCLE을 출력하고 끝내려했는데, 코딩 미스인건지 오답을 맞았다.
입출력 몇 개를 예로 적어놔야겠다.
예제 #1
6 2 2 3 2 4 6 1 4 1 5 1 3
CYCLE
예제 #2
6 2 2 6 1 6 1 4 2 2 5 1 3
NO CYCLE
#include <bits/stdc++.h> using namespace std; int main(){ int i, j, k, n, m; bool v[101][101]={}; scanf("%d", &n); for(i=0; i<n-1; ++i){ scanf("%d", &m); while(m--){ scanf("%d", &k); v[i][k-1] = true; } } for(k=0; k<n; ++k){ for(i=0; i<n; ++i){ for(j=0; j<n; ++j){ v[i][j] |= v[i][k] & v[k][j]; } } } bool cycle = false; for(i=0; i<n-1; ++i){ cycle |= v[0][i] && v[i][i]; } if(!cycle) printf("%s ", "NO"); puts("CYCLE"); return 0; }
댓글 없음:
댓글 쓰기