Pagini recente » Cod sursa (job #2886522) | Cod sursa (job #1155951) | Cod sursa (job #2455551) | Cod sursa (job #1090375) | Cod sursa (job #2521495)
import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
interface Solver {
void solve(BufferedReader br, PrintWriter pw) throws IOException;
}
static class AppConfig {
public static final String ROOT_DIR = "d:\\Dev\\Local\\algorithms\\";
public static final String SEPARATOR = "\\";
public static final String DATA_DIR = "data";
}
static class UsacoAssignSolver implements Solver {
int n;
int[] colours;
List<List<Integer>> same;
List<List<Integer>> different;
@Override
public void solve(BufferedReader br, PrintWriter pw) throws IOException {
same = new ArrayList<>();
different = new ArrayList<>();
String[] splits = br.readLine().split(" ");
n = Integer.parseInt(splits[0]);
colours = new int[n];
int k = Integer.parseInt(splits[1]);
for (int i = 0; i < k; i++) {
splits = br.readLine().split(" ");
char type = splits[0].charAt(0);
Integer cow1 = Integer.parseInt(splits[1]);
Integer cow2 = Integer.parseInt(splits[2]);
if (type == 'S') {
same.add(Arrays.asList(cow1, cow2));
} else {
different.add(Arrays.asList(cow1, cow2));
}
}
int nSol = generateSolutions();
pw.println(3 * nSol);
}
private int generateSolutions() {
int ans = 0;
colours[0] = 0;
int pow3 = 1;
for (int i = 1; i < n; i++) {
pow3 *= 3;
}
for (int i = 0; i < pow3; i++) {
populateColours(i);
if (checkColours()) {
ans++;
}
}
return ans;
}
private void populateColours(int code) {
for (int i = n - 1; i >= 1; i--) {
colours[i] = code % 3;
code = code / 3;
}
}
private Boolean checkColours() {
for (List<Integer> pair : same) {
int cow1 = pair.get(0);
int cow2 = pair.get(1);
if (colours[cow1 - 1] != colours[cow2 - 1]) {
return false;
}
}
for (List<Integer> pair : different) {
int cow1 = pair.get(0);
int cow2 = pair.get(1);
if (colours[cow1 - 1] == colours[cow2 - 1]) {
return false;
}
}
return true;
}
}
private Solver solver;
private BufferedReader br;
private PrintWriter pw;
private void setupStandardIO() throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
private void setupIOFromFile(String filePath) throws IOException {
br = new BufferedReader(new FileReader(new File(filePath + ".in")));
pw = new PrintWriter(new BufferedWriter(new FileWriter(new File(filePath + ".out"))));
}
Main(Solver solver, String fileName) throws IOException {
this.solver = solver;
if (fileName == null) {
setupStandardIO();
} else if(fileName.startsWith("USACO_")) {
setupIOFromFile(fileName.substring(6));
} else {
setupIOFromFile(AppConfig.ROOT_DIR + AppConfig.SEPARATOR + AppConfig.DATA_DIR + AppConfig.SEPARATOR + fileName);
}
}
public static void main(String[] args) throws IOException {
Main app = new Main(new UsacoAssignSolver(), "USACO_assign");
app.runSolver();
}
private void runSolver() throws IOException {
solver.solve(br, pw);
br.close();
pw.close();
}
}