import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class fio {
public static void main(String[] args) throws FileNotFoundException {
Scanner odczyt = new Scanner(new BufferedInputStream(System.in));
int liczbaFiolek = odczyt.nextInt();
int dlugoscEksperymentu = odczyt.nextInt();
int liczbaParReagujacych = odczyt.nextInt();
int[] iloscSubstancji = new int[liczbaFiolek];
for (int i = 0; i < liczbaFiolek; i++)
iloscSubstancji[i] = odczyt.nextInt();
Krok[] krokiEksperymentu = new Krok[dlugoscEksperymentu];
for (int eksperyment = 0; eksperyment < dlugoscEksperymentu; eksperyment++) {
int wlewany = odczyt.nextInt();
int naczynie = odczyt.nextInt();
Krok krok = new Krok(wlewany, naczynie);
krokiEksperymentu[eksperyment] = krok;
}
TreeSet<Integer> kolejneWystapienia = new TreeSet<Integer>();
for (int reagent = 0; reagent < liczbaParReagujacych; reagent++) {
int reagent1 = odczyt.nextInt();
int reagent2 = odczyt.nextInt();
Krok krokOpcja1 = new Krok(reagent1, reagent2);
Krok krokOpcja2 = new Krok(reagent2, reagent1);
int wystapienieDla1 = Arrays.binarySearch(krokiEksperymentu, krokOpcja1, new KrokC());
int wystapienieDla2 = Arrays.binarySearch(krokiEksperymentu, krokOpcja2, new KrokC());
int max = Math.max(wystapienieDla1, wystapienieDla2);
if (max>=0) {
kolejneWystapienia.add(max);
}
}
odczyt.close();
int iloscZmarnowanego = 0;
for (int i : kolejneWystapienia){
int reagent1 = krokiEksperymentu[i].from;
int reagent2 = krokiEksperymentu[i].to;
int min = Math.min(iloscSubstancji[reagent1-1], iloscSubstancji[reagent2-1]);
iloscSubstancji[reagent1-1] -= min;
iloscSubstancji[reagent2-1] -= min;
iloscZmarnowanego += 2*min;
}
System.out.println(iloscZmarnowanego);
}
}
class KrokC implements Comparator<Krok> {
@Override
public int compare(Krok p, Krok d) {
if (p.from == d.from && p.to == d.to)
return 0;
if (p.from > d.from)
return 1;
else return -1;
}
}
class Krok{
int from;
int to;
Krok(int from, int to){
this.from = from;
this.to = to;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import java.io.BufferedInputStream; import java.io.FileNotFoundException; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet; public class fio { public static void main(String[] args) throws FileNotFoundException { Scanner odczyt = new Scanner(new BufferedInputStream(System.in)); int liczbaFiolek = odczyt.nextInt(); int dlugoscEksperymentu = odczyt.nextInt(); int liczbaParReagujacych = odczyt.nextInt(); int[] iloscSubstancji = new int[liczbaFiolek]; for (int i = 0; i < liczbaFiolek; i++) iloscSubstancji[i] = odczyt.nextInt(); Krok[] krokiEksperymentu = new Krok[dlugoscEksperymentu]; for (int eksperyment = 0; eksperyment < dlugoscEksperymentu; eksperyment++) { int wlewany = odczyt.nextInt(); int naczynie = odczyt.nextInt(); Krok krok = new Krok(wlewany, naczynie); krokiEksperymentu[eksperyment] = krok; } TreeSet<Integer> kolejneWystapienia = new TreeSet<Integer>(); for (int reagent = 0; reagent < liczbaParReagujacych; reagent++) { int reagent1 = odczyt.nextInt(); int reagent2 = odczyt.nextInt(); Krok krokOpcja1 = new Krok(reagent1, reagent2); Krok krokOpcja2 = new Krok(reagent2, reagent1); int wystapienieDla1 = Arrays.binarySearch(krokiEksperymentu, krokOpcja1, new KrokC()); int wystapienieDla2 = Arrays.binarySearch(krokiEksperymentu, krokOpcja2, new KrokC()); int max = Math.max(wystapienieDla1, wystapienieDla2); if (max>=0) { kolejneWystapienia.add(max); } } odczyt.close(); int iloscZmarnowanego = 0; for (int i : kolejneWystapienia){ int reagent1 = krokiEksperymentu[i].from; int reagent2 = krokiEksperymentu[i].to; int min = Math.min(iloscSubstancji[reagent1-1], iloscSubstancji[reagent2-1]); iloscSubstancji[reagent1-1] -= min; iloscSubstancji[reagent2-1] -= min; iloscZmarnowanego += 2*min; } System.out.println(iloscZmarnowanego); } } class KrokC implements Comparator<Krok> { @Override public int compare(Krok p, Krok d) { if (p.from == d.from && p.to == d.to) return 0; if (p.from > d.from) return 1; else return -1; } } class Krok{ int from; int to; Krok(int from, int to){ this.from = from; this.to = to; } } |
English