Cod sursa(job #2666094)

Utilizator dani.markadonDonescu Daniel-Adrian dani.markadon Data 31 octombrie 2020 21:01:03
Problema Stramosi Scor 20
Compilator java Status done
Runda Arhiva de probleme Marime 2.01 kb
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

class Pair{
	int Q;
	int P;
	
	public Pair(int Q, int P) {
		this.Q = Q;
		this.P = P;
	}
	
	public int getQ() {
		return Q;
	}
	
	public int getP() {
		return P;
	}
}

public class Main {
	
	int n;
	int m;
	int[] anc;
	Pair[] questions;
	
	int[][] G;
	
	public void readFromFile(String fileName) throws FileNotFoundException {
		
		File file = new File(fileName);
		Scanner sc = new Scanner(file);
		
		n = sc.nextInt();
		m = sc.nextInt();
			
		anc = new int[n];
		for(int i = 0; i < n; i++) {
			anc[i] = sc.nextInt();
		}
			
		questions = new Pair[m];
		for(int i = 0; i < m; i++) {
			questions[i] = new Pair(sc.nextInt(), sc.nextInt());
		}
	}
	
	public void buildGraph() {
		G = new int[n][];
		
		for(int i = 0; i < n; i++) {
			G[i] = new int[n];
			for(int j = 0; j < n; j++) {
				G[i][j] = 0;
			}
		}
		
		for(int i = 0; i < n; i++) {
			if(anc[i]-1 >= 0)
				G[i][anc[i]-1] = 1;
		}
	}
	
	public void answerToQuestions(String fileName) throws IOException{
		
		
		FileWriter wr = new FileWriter(fileName);
		
		for(int i = 0; i < m; i++) {
			int Q = questions[i].getQ();
			int P = questions[i].getP();
			
			Q--;
			while(P > 0){
				int j;
				for(j = 0; j < n; j++)
					if(G[Q][j] == 1){
							Q = j;
							P--;
							break;
						}
				if(j == n)
				{
					Q = -1;
					break;
				}
			}
			
			Integer q = Q+1;
			wr.write(q.toString().toCharArray());
			wr.write("\n");
		}
		
		wr.close();
	}
	
	public Main() {
		try {
		readFromFile("stramosi.in");
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}
		
		buildGraph();
		
		try {
		answerToQuestions("stramosi.out");
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Main();
	}
}