您的位置:首页 > 大数据 > 人工智能

usaco 4.2.1 Drainage Ditches

2014-05-04 15:35 239 查看
/*
ID: daniel.20
LANG: JAVA
TASK: ditch
*/

import java.util.*;
import java.io.*;

class problem3{
StringBuilder sb = new StringBuilder();
int[][] map = new int[220][220];
boolean vis[];
void solver() throws IOException{
long start = System.currentTimeMillis();
BufferedReader reader = new BufferedReader(new FileReader("ditch.in"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("ditch.out")));
StringTokenizer st = new StringTokenizer(reader.readLine());
int n = Integer.valueOf(st.nextToken());
int m = Integer.valueOf(st.nextToken());
for(int i=0;i<n;i++){
st = new StringTokenizer(reader.readLine());
int from = Integer.valueOf(st.nextToken());
int to = Integer.valueOf(st.nextToken());
int w = Integer.valueOf(st.nextToken());
map[from][to]+=w;
}
//Dumper.print_2_arr(map, m+1, m+1);
int flow = 0;
while(true){
vis = new boolean[m+1];
int f = dfs(1,m,Integer.MAX_VALUE);
if(f==0) break;
flow+=f;
}
sb.append(flow);
System.out.println(flow);
pw.println(sb.toString());
pw.close();
System.out.println("$:"+(System.currentTimeMillis()-start));
System.exit(0);
}
int dfs(int s, int t, int f){
if(s==t) return f;
vis[s] = true;
for(int i=1;i<=t;i++){
if(vis[i]||map[s][i]<=0) continue;
int tmp = dfs(i,t,Math.min(f, map[s][i]));
if(tmp>0){
map[s][i]-=tmp;
map[i][s]+=tmp;
return tmp;
}
}
return 0;
}
}

public class ditch {

public static void main(String[] args) throws Exception {
problem3 p = new problem3();
p.solver();
}
}

由于题目裸得太厉害,直接撸了一个朴素DFS找路径就过了

原来第四章也有这么水的,和前面几个搜索完全不在一个难度啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: