CSES - Datatähti 2016 alku - Results
Submission details
Task:Lennot
Sender:kalh
Submission time:2015-09-30 14:47:31 +0300
Language:Java
Status:COMPILE ERROR

Compiler report

input/Tehtava4.java:68: error: unmappable character for encoding UTF8
				//System.out.println("menn??n kaupunkiin " + kaupunki);
				                          ^
input/Tehtava4.java:68: error: unmappable character for encoding UTF8
				//System.out.println("menn??n kaupunkiin " + kaupunki);
				                           ^
2 errors

Code

import java.util.*;

public class Tehtava4 {
	
	public static void laskeHalvin(int kohde, int lentoMaara, ArrayList<int[]> yhteydet) {
		
		// lasketaan joku reitti

		int testiHinta = maaritaJokuHinta(kohde, lentoMaara, yhteydet);
		HashMap<Integer, Integer> kaydytKaupungit = new HashMap<Integer, Integer>();
		kaydytKaupungit.put(1, 0);
		int hinta = laskeReitti(1, kohde, lentoMaara, 0, testiHinta, false, yhteydet, kaydytKaupungit);
		System.out.println(hinta);
		
	}
	
	public static int laskeReitti(int kaupunki, int kohde, int lentoMaara, int hinta, int matalinHinta, boolean ilmainen, ArrayList<int[]> yhteydet, HashMap<Integer, Integer> kaydyt) {
		
		if (hinta >= matalinHinta)
			return hinta;
		
		int halvin = matalinHinta;
		for (int i = 0; i<lentoMaara; i++) {
			
			int[] yhteys = yhteydet.get(i);
			
			// onko sama kaupunki kuin missa ollaan
			if (yhteys[0] != kaupunki)
				continue;
			
			
			int uusikaupunki = yhteys[1];
			int kokonaishinta = hinta;
			if (!ilmainen)
				kokonaishinta += yhteys[2];
			
			int halvinReitilla = laskeReitti(uusikaupunki, kohde, lentoMaara, kokonaishinta, halvin, !ilmainen, yhteydet, kaydyt);
			if (halvinReitilla < halvin)
				halvin = halvinReitilla;
		}
		
		return halvin;
		
	}
	
	public static int maaritaJokuHinta(int kohde, int lentoMaara, ArrayList<int[]> yhteydet) {
		int testireitinHinta = 0;
		
		int kaupunki = 1;
		int hinta = 0;
		int monesko = 0;
		
		HashSet<Integer> kaydyt = new HashSet<Integer>();
		kaydyt.add(1);
		
		while (true) {
			for (int i = 0; i<lentoMaara; i++) {
				int[] yhteys = yhteydet.get(i);
				
				if (yhteys[0] != kaupunki)
					continue;
				
				if (kaydyt.contains(yhteys[1]))
					continue;
				
				kaupunki = yhteys[1];
				kaydyt.add(kaupunki);
				//System.out.println("mennään kaupunkiin " + kaupunki);
				monesko++;
				if (monesko%2 != 0)
					hinta += yhteys[2];
				
				if (kaupunki == kohde) {
					testireitinHinta = hinta;
				}
				break;
		
			}
			
			if (testireitinHinta != 0)
				break;
			
		}
		
		return testireitinHinta;
	}
	
	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		
		String[] arvot = new String[2];
		
		arvot = s.nextLine().split("\\s+");
		int kaupunkiMaara = Integer.parseInt(arvot[0]);
		int lentoMaara = Integer.parseInt(arvot[1]);
		
		//int kaupunkiMaara = 4;
		//int lentoMaara = 6;
		
		ArrayList<int[]> yhteydet = new ArrayList<int[]>();
		
		for (int i = 0; i<lentoMaara; i++) {
			String[] arvot1 = s.nextLine().split("\\s+");
			int lahto = Integer.parseInt(arvot1[0]);
			int kohde = Integer.parseInt(arvot1[1]);
			int hinta = Integer.parseInt(arvot1[2]);
			int[] yhteys = {lahto, kohde, hinta};
			
			yhteydet.add(yhteys);
		}
	//	int[] yhteys1 = {1, 2, 5};
	//	int[] yhteys2 = {2, 3, 8};
	//	int[] yhteys3 = {2, 1, 4};
	//	int[] yhteys4 = {3, 1, 6};
	//	int[] yhteys5 = {3, 4, 1};
	//	int[] yhteys6 = {4, 2, 3};
	//	yhteydet.add(yhteys1);
	//	yhteydet.add(yhteys2);
	//	yhteydet.add(yhteys3);
	//	yhteydet.add(yhteys4);
	//	yhteydet.add(yhteys5);
	//	yhteydet.add(yhteys6);
		
		laskeHalvin(kaupunkiMaara, lentoMaara, yhteydet);
	}

}