[白俊]1738冷凍ペンギン

13821 ワード

PS_LINK
🌕を作成します.특수 얼음 깨기 펭귄 게임에 있는 얼음의 종류로는 지지대의 역할을 하는 얼음과 일반 얼음 총 2가지의 얼음이 존재한다. 지지대의 역할을 하는 얼음의 경우, 빨간색으로 구분하여 볼 수 있으며 일반 얼음을 지탱해 주어 일반 얼음들이 깨지지 않도록 도와준다. 일반 얼음의 경우에는 1개의 지지대만이 연결되어 있어도 얼음이 깨지지 않지만 펭귄이 올라가 있는 얼음은 2개 이상의 지지대의 역할을 하는 얼음이 연결되어 있어야만 얼음이 깨지지 않는다. 이때, 지지대가 연결되어 있다는 것은 지지대로부터 서로 다른 일반 얼음들을 통해 연결 관계가 이어져 있는 것을 이야기한다. 특수 얼음 깨기 펭귄 게임에서 도도가 펭귄을 떨어뜨리지 않고 최대 몇 개의 얼음을 깰 수 있을까?📢Description
ペンギンが落ちないように、任意に2つのブラケットを選択し、残りの氷の数が最大になったときに救助することができます.
  • dfs探索によりブラケットに入る.
  • ブラケットまでの幹線の重み付け値は1です.
  • ブラケットに達すると、重み付けがリストに格納されます.
  • スタンドまで歩いても循環しません.2つの異なる氷の経路を歩くのが唯一だからです.
    💻Code
    package Alone.review._210604;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class IcyBreaking {
        static int n, s, p;
        static ArrayList<Integer> list[];
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            n = Integer.parseInt(st.nextToken());
            s = Integer.parseInt(st.nextToken());
            p = Integer.parseInt(st.nextToken());
            list=new ArrayList[n+1];
            for (int i = 0; i < n+1; i++) {
                list[i]=new ArrayList<>();
            }
            for (int i = 0; i < n-1; i++) {
                st=new StringTokenizer(br.readLine());
                int a=Integer.parseInt(st.nextToken());
                int b=Integer.parseInt(st.nextToken());
                list[a].add(b);
                list[b].add(a);
            }
    
            dfs(p,-1,0);
            answer.sort((o1, o2) -> o1-o2);
            System.out.println(n-1-answer.get(0)-answer.get(1));
    
        }
        static ArrayList<Integer> answer=new ArrayList<>();
        static void dfs(int cur,int parent,int cnt)
        {
            if(1<=cur && cur<=s)
            {
                answer.add(cnt);
                return;
            }
    
            for (int i = 0; i < list[cur].size(); i++) {
                int next=list[cur].get(i);
                if(next!=parent)
                {
                    dfs(next,cur,cnt+1);
                }
            }
        }
    }