퍼레이드16168

LJM·2023년 7월 19일
0

백준풀기

목록 보기
187/259

https://www.acmicpc.net/problem/16168

버텍스마다 간선연결개수가

!!모두짝 OR 두개홀 이면 오일러경로 있다!!

이문제는 그리고 그래프가 분리된 경우가 있다
문제에 명시되어 있지 않다....

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] input = br.readLine().split(" ");

        int v = Integer.parseInt(input[0]);
        int e = Integer.parseInt(input[1]);

        ArrayList<ArrayList<Integer>> arr = new ArrayList<>();
        for (int i = 0; i <= v; i++) {
            arr.add(new ArrayList<>());
        }

        for (int i = 0; i < e; i++) {
            input = br.readLine().split(" ");

            int a = Integer.parseInt(input[0]);
            int b = Integer.parseInt(input[1]);

            arr.get(a).add(b);
            arr.get(b).add(a);
        }

        boolean[] visit = new boolean[v+1];
        visit[1] = true;
        if(v != (1 + connected(arr, 1, visit))){
            System.out.println("NO");
            return;
        }

        int odd = 0;
        int even = 0;
        for (int i = 1; i <= v; i++) {
            if(arr.get(i).size() %2 == 0)
                even++;
            else
                odd++;
        }

        if(even == v || odd == 2){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
    }

    static int connected(ArrayList<ArrayList<Integer>> arr, int parent, boolean[] visit){

        ArrayList<Integer> cur = arr.get(parent);
        int count = 0;
        for (int i = 0; i < cur.size(); i++) {
            int child = cur.get(i);

            if (visit[child] == false) {
                visit[child] = true;
                count += connected(arr, child, visit) + 1;
                //visit[child] = false;
            }

        }

        return count;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글