Você está na página 1de 2

import java.io.

BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class InternetBandwith {
static int [][] matriz;
static int [] pi;
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(new InputStreamReader(Sys
tem.in));
PrintWriter out = new PrintWriter(System.out);
int net = 1;
while(true){
int nodes = Integer.parseInt(in.readLine());
if(nodes == 0){
break;
}
StringTokenizer st = new StringTokenizer(in.readLine());
int s = Integer.parseInt(st.nextToken()) - 1;
int t = Integer.parseInt(st.nextToken()) - 1;
int conn = Integer.parseInt(st.nextToken());
matriz = new int [nodes][nodes];
for (int i = 0; i < conn; i++) {
st = new StringTokenizer(in.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int f = Integer.parseInt(st.nextToken());
matriz[a - 1][b - 1] += f;
matriz[b - 1][a - 1] += f;
}
int flow = flujo(s,t);
out.println("Network " + net);
net++;
out.println("The bandwidth is " + flow + ".\n");
}
out.close();
}
static int flujo(int s, int t){
int flow = 0;
int residualN [][]=new int [matriz.length][matriz.length];
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz.length; j++) {
residualN[i][j] = matriz[i][j];
}
}
pi = new int[matriz.length];
while(bfs(s,t, residualN)){
int min_flow = Integer.MAX_VALUE;
for (int v = t; v != s; v = pi[v]) {
int u = pi[v];
min_flow = Math.min(min_flow, residualN[u][v]);
}
for (int v = t; v != s; v = pi[v]) {
int u = pi[v];
residualN[u][v] -= min_flow;
residualN[v][u] += min_flow;
}
flow += min_flow;
}
return flow;
}
static boolean bfs(int s, int t, int [][] residualN) {
Arrays.fill(pi, -2);
Queue<Integer> q = new LinkedList<>();
q.offer(s);
pi[s] = -1;
while(!q.isEmpty()){
int u = q.poll();
for (int v = 0; v < residualN[u].length; v++) {
if((residualN[u][v] > 0) && (pi[v] == -2)){
q.offer(v);
pi[v] = u;
}
}
}
if(pi[t] >= 0){
return true;
}
return false;
}
}

Você também pode gostar