import java.util.*;
class Edge { // 간접 리스트를 위한 클래스
int from, to;
Edge(int from, int to) {
this.from = from;
this.to = to;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 사람 수
int m = sc.nextInt(); // 관계 수
boolean[][] a = new boolean[n][n]; // 인접 행렬 구현
ArrayList<Integer>[] g = (ArrayList<Integer>[]) new ArrayList[n]; // 인접 리스트 구현
ArrayList<Edge> edges = new ArrayList<Edge>(); // 간접 리스트 구현
for (int i=0;i<n;i++) { // 인접 리스트는 각 정점마다 연결된 간선을 저장하므로
g[i] = new ArrayList<>(); // 각 정점에 대해 리스트를 할당
}
for (int i=0; i<m; i++) {
// 친구 관계는 양방향 관계이므로 양 방향으로 간선을 배정해야 한다.
// 간선 리스트에 관계 저장
int from = sc.nextInt();
int to = sc.nextInt();
edges.add(new Edge(from, to));
edges.add(new Edge(to, from));
// 인접 행렬에 관계 저장
a[from][to] = a[to][from] = true;
// 인접 리스트에 관계 저장
g[from].add(to);
g[to].add(from);
}
// 관계는 양방향이므로 입력된 관계*2를 해주어야 간선들의 총 개수가 된다.
m *= 2;
// 아래는 2개의 간선들에 대한 관계 파악해줌
for (int i=0;i<m;i++) {
for (int j=0;j<m;j++) {
// 간선리스트 사용
int A = edges.get(i).from;
int B = edges.get(i).to;
int C = edges.get(j).from;
int D = edges.get(j).to;
// B-C 친구 관계 여부를 간선 리스트로 확인
// 서로 다른 두 간선이 연결되어 있는지 확인
// A-B, C-D가 친구일 때 B-C가 친구인지 확인하는 것
if (A == B || A == C || A == D || B == C || B == D || C == D) {
// A==B이면 edges i는 간선이 아님
// A==C 또는 A==D는 간선 i와 j가 정점 1개를 공유하는 간선이라는 것이다.
// (서로 다른 정점 4개를 연결하는 간선이 아닌 것임)
continue; // 위 조건에 해당하면 A-B, C-D가 친구일 때 B-C가 친구인지 확인할 수 없으므로 continue (정점 4개에 대한 관계가 아니게 되기 때문)
}
// 인접 행렬 사용
if (!a[B][C]) continue; // A-B, C-D 에서 B-C 관계도 성립하지 않는다면 continue
// 인접 리스트 사용
for (int E : g[D]) { // D 정점과 연결된 정점들이 E로 들어온다.
if (A == E || B == E || C == E || D == E) continue;
// 연결된 정점이 A, B, C, D와 같다면 이는 중복되는 간선이 들어온 것이므로 continue
// (D-E 관계에 해당하지 않는다는 것)
// 위 조건들을 모두 통과하면 A-B-C-D-E 관계가 존재한다는 것이다.
System.out.println(1);
System.exit(0);
}
}
}
// 위 모든 쌍의 간선들을 확인했음에도 불구하고 모두 조건문에 걸려 continue 처리되어
// 해당 코드에 다다르면 A-B-C-D-E 관계가 성립하지 않는다는 것이다.
System.out.println(0);
}
}
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
JAVA)10824번 네 수 - 자료형 (0) | 2020.08.18 |
---|---|
JAVA)1918번 후위 표기식 - 스택(Stack) (0) | 2020.08.18 |
JAVA)14391번 종이 조각 - 브루트 포스, 비트마스크 (0) | 2020.08.12 |
JAVA)1182번 부분수열의 합 - 브루트포스, 비트마스크 (0) | 2020.08.12 |
JAVA)10974번 모든 순열 - 브루트 포스, 순열 (0) | 2020.08.05 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
JAVA)10824번 네 수 - 자료형
JAVA)1918번 후위 표기식 - 스택(Stack)
JAVA)14391번 종이 조각 - 브루트 포스, 비트마스크
JAVA)1182번 부분수열의 합 - 브루트포스, 비트마스크