Cod sursa(job #1841441)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 5 ianuarie 2017 17:17:36
Problema Colorare3 Scor 100
Compilator java Status done
Runda Arhiva de probleme Marime 1.93 kb
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

	static final int MOD = 1000000000 + 7;
	static ArrayList<ArrayList<Integer> > graph;
	
	static int ans, K;
	static void dfs(int node, int father) {
		int cnt = K;
		if (father > 0)
			cnt --;
		
		for (int i = 0; i < graph.get(node).size(); ++ i)
			if (graph.get(node).get(i) != father) {
				dfs(graph.get(node).get(i), node);
				ans = (int) (((long)cnt * ans) % MOD);
				cnt --;
			}
	}
	
	public static void main(String[] args) throws FileNotFoundException {
		MyScanner sc = new MyScanner(new FileInputStream("colorare3.in"));
		PrintWriter out = new PrintWriter("colorare3.out");
		
		int N = sc.nextInt();
		K = sc.nextInt();
		
		graph = new ArrayList <ArrayList <Integer> >(N + 1);
		
		for (int i = 0; i <= N; ++ i)
			graph.add(new ArrayList <Integer>());
		
		for (int i = 1; i < N; ++ i) {
			int a = sc.nextInt();
			int b = sc.nextInt();
		
			graph.get(a).add(b);
			graph.get(b).add(a);
		}
		
		ans = 1;
		dfs(1, 0);
		
		out.println(ans);
		out.close();
	}
	
	public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner(FileInputStream fis) {
	         br = new BufferedReader(new InputStreamReader(fis));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	   }
}