poj 2112 Optimal Milking
来源:互联网 发布:达内 专业硕士java 编辑:程序博客网 时间:2024/05/18 00:29
二分答案,然后每个长度做网络流。
由于输入恶心加上我比较菜...WA了好多次,最重要的是牛到机器建的应该是有向图,我建成无向图了。
import java.util.*;import java.io.*;class edge implements Comparable<edge>{ int from, to, len; public edge(int a, int b, int c){ from=a;to=b;len=c; } @Override public int compareTo(edge t) { return this.len - t.len; } }class problem11{ int k,c,m; int g[][]; ArrayList<edge> arr = new ArrayList<edge>(); int left=1,right=1; int result; int level[]; void solver() throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(reader.readLine().trim()); k = Integer.valueOf(st.nextToken()); c = Integer.valueOf(st.nextToken()); m = Integer.valueOf(st.nextToken()); g = new int[k+c][k+c]; for(int i=0;i<k+c;i++){ for(int j=0;j<k+c;){ if(st.hasMoreTokens()){ g[i][j] = Integer.valueOf(st.nextToken()); if(g[i][j]==0&&i!=j) g[i][j] = 999999999; j++; }else{ st = new StringTokenizer(reader.readLine()); } } } floyd(); for(int i=0;i<k+c;i++){ for(int j=0;j<k+c;j++){ if(g[i][j]>0&&g[i][j]<999999999){ arr.add(new edge(i+1,j+1,g[i][j])); if(g[i][j]>right) right = g[i][j]; } } } g = new int[k+c+2][k+c+2]; while(left<=right){ int mid = (left+right)/2; for(int i=0;i<k+c+2;i++){ Arrays.fill(g[i], 0); } for(int i=0;i<arr.size();i++){ edge tmp = arr.get(i); if(tmp.len<=mid&&tmp.from<=k&&tmp.to>k){ g[tmp.from][tmp.to] = 1; //g[tmp.to][tmp.from] = 1; } } for(int i=1;i<=k;i++){ g[0][i] = m; g[i][0] = m; } for(int i=k+1;i<k+c+1;i++){ g[i][k+c+1] = 1; g[k+c+1][i] = 1; } int flow = max_flow(0,k+c+1); if(flow>=c){ result = mid; right = mid-1; }else{ left = mid+1; } } System.out.println(result); } int max_flow(int s, int t){ int flow = 0; while(bfs(s,t)){ flow+=dfs(s,t,Integer.MAX_VALUE); } return flow; } boolean bfs(int s, int t){ level = new int[k+c+2]; Arrays.fill(level, -1); level[s] = 0; Queue<Integer> q = new LinkedList<Integer>(); q.add(s); while(!q.isEmpty()){ int tmp = q.poll(); for(int i=0;i<k+c+2;i++){ if(g[tmp][i]>0&&level[i]==-1){ level[i]=level[tmp]+1; q.add(i); } } } return level[t]!=-1; } int dfs(int s, int t, int min){ if(s==t) return min; int tmp = min; for(int i=0;i<k+c+2;i++){ if(g[s][i]==0||level[i]!=level[s]+1) continue; int d = dfs(i,t,Math.min(g[s][i], min)); g[s][i]-=d; g[i][s]+=d; min-=d; } return tmp-min; } void floyd(){ for(int i=0;i<k+c;i++){ for(int x=0;x<k+c;x++){ for(int y=0;y<k+c;y++){ if(g[x][i]+g[i][y]<g[x][y]) g[x][y] = g[x][i]+g[i][y]; } } } }}public class fence8{ public static void main (String [] args) throws Exception { problem11 p = new problem11(); p.solver(); }}
0 0
- POJ 2112 Optimal Milking
- POJ 2112 OPtimal Milking
- POJ 2112 Optimal Milking
- poj 2112 Optimal Milking
- POJ-2112-Optimal Milking
- poj 2112 Optimal Milking
- poj 2112 Optimal Milking
- poj-2112-Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112:Optimal Milking
- poj 2112 Optimal Milking
- [poj 2112]Optimal Milking
- 【Poj 2112】 Optimal Milking
- POJ-2112 Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112:Optimal Milking
- Java读写Excel
- Struts2---上
- C# MVC4环境下Uploadify 3.2.1上传文件
- 文本特征提取方法研究
- fedora 21编译安装qemu-2.3.0
- poj 2112 Optimal Milking
- Android 内存检测
- 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD
- 使用vs编译程序选择新建”空项目“与”win32控制台应用程序“的区别。
- 【POJ1330】最近公共祖先(LCA):并查集+深搜
- 开源 Java 中文分词器 Ansj 作者孙健专访
- 软考(三)——操作系统
- ThinkPHP框架完全解析一
- JQuery列表模式大图模式切换