Monday, December 6, 2021

USACO February 2019 Bronze Problem: Revegetate

/*
ID: karihee1
LANG: JAVA
TASK: revegetate
*/

/*  revegetate.java
*/

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

class revegetate {
    public static void main (String [] args) throws IOException {

        //BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        //PrintWriter out = new PrintWriter(System.out);
        BufferedReader in = new BufferedReader(new FileReader("revegetate.in"));
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("revegetate.out")));

        StringTokenizer st;
    
        st = new StringTokenizer(in.readLine());        
        int N = Integer.parseInt(st.nextToken());        // Pastures
        int M = Integer.parseInt(st.nextToken());        // Cows
        
        // System.out.println(N + " " + M);   // DEBUGGING PRINT STATEMENT

        ArrayList<ArrayList<Integer> > pastureList = new ArrayList<ArrayList<Integer>>(N);
        for (int i=0; i<N; i++) {
            ArrayList<Integer> temp = new ArrayList<Integer>();
            pastureList.add(temp);
        }

        for (int i=0;i<M;i++) {
            st = new StringTokenizer(in.readLine());
            int P1 = Integer.parseInt(st.nextToken());    // Pasture 1 for this cow 
            int P2 = Integer.parseInt(st.nextToken());    // Pasture 2 for this cow 
            
            // System.out.println(P1 + " " + P2);  // DEBUGGING PRINT STATEMENT

            pastureList.get(P1-1).add(P2-1);
            pastureList.get(P2-1).add(P1-1);
        }

        //for (int i=0;i<N; i++) {
        //    System.out.println(pastureList.get(i).toString()); // DEBUGGING PRINT STATEMENT
        //}

        // Input Data Loaded...Begin Planting Seed

        int[] answer = new int[N];
        answer[0]=1; //initialize with seed type 1 in pasture 0, can't be conflict yet.

        ArrayList<Integer> work = new ArrayList<Integer>();
        for (int i=1;i<N;i++) {
            for (int j=1;j<=4;j++) {
                // attempt to place seed j in pasture i, check for conflict
                boolean conflict = false;
                work = pastureList.get(i);

                for (int p = 0; p < work.size(); p++) {
                    if (j==answer[work.get(p)]) {
                        conflict = true;
                        break;
                    }
                }
                if (conflict) continue;  // conflict found for seed type j, try next seed type
                else {
                    answer[i]=j;         // success!
                    break;
                } 
            }
        }

		for (int i=0; i<N; i++) {
            out.print(answer[i]);
        }
		out.println();
        out.close();
    }
}