POJ 2455 Secret Milking Machine
2015-04-23 21:45
357 查看
二分答案再网络流
原来我一直写的Dinic其实是EK。。。好吧,哎。。
原来我一直写的Dinic其实是EK。。。好吧,哎。。
import java.util.*; import java.io.*; class edge implements Comparable<edge>{ int f,t,l; public edge(int a,int b,int c){ f=a;t=b;l=c; } @Override public int compareTo(edge x) { return this.l - x.l; } public void print(){ System.out.print(f+"--->"+t+": "+l); } } class problem{ int n,p,t; edge arr[]; int g[][]; int max_len; int level[]; void solver() throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(reader.readLine()); n = Integer.valueOf(st.nextToken()); p = Integer.valueOf(st.nextToken()); t = Integer.valueOf(st.nextToken()); arr = new edge[p]; g = new int[n+1][n+1]; for(int i=0;i<p;i++){ st = new StringTokenizer(reader.readLine()); int from = Integer.valueOf(st.nextToken()); int to = Integer.valueOf(st.nextToken()); int len = Integer.valueOf(st.nextToken()); arr[i]=new edge(from,to,len); if(len>max_len) max_len=len; } Arrays.sort(arr); int left =arr[t-1].l; int right = max_len; while(left<=right){ int mid = (left+right)/2; for(int i=0;i<=n;i++){ Arrays.fill(g[i], 0); } for(int i=0;i<p;i++){ if(arr[i].l<=mid){ g[arr[i].f][arr[i].t] +=1; g[arr[i].t][arr[i].f] +=1; }else break; } int flow = max_flow(1,n); if(flow>=t){ right=mid-1; }else{ left=mid+1; } } System.out.println(left); } 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[n+1]; Arrays.fill(level, -1); Queue<Integer> q = new LinkedList<Integer>(); q.add(s); level[s]=0; while(!q.isEmpty()){ int tmp = q.poll(); for(int i=1;i<=n;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=1;i<=n;i++){ if(g[s][i]==0||level[i]!=level[s]+1) continue; int d = dfs(i,t,Math.min(min, g[s][i])); g[s][i]-=d; g[i][s]+=d; min-=d; } return tmp - min; } } public class fence8{ public static void main (String [] args) throws Exception { problem p = new problem(); p.solver(); } }
相关文章推荐
- POJ2455 Secret Milking Machine 典型二分答案+最大流判定
- poj 2455 Secret Milking Machine
- poj2455 Secret Milking Machine(二分答案+最大流)
- POJ 2455 - Secret Milking Machine
- POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)
- POJ 2455 Secret Milking Machine && 二分枚举 + 最大流
- poj 2455 Secret Milking Machine
- poj 2455 Secret Milking Machine 最大流+二分查找
- POJ 2455 Secret Milking Machine(二分答案+最大流)
- poj 2455 Secret Milking Machine (网络流)
- POJ 2455 Secret Milking Machine (二分 + 最大流)
- POJ 2455 Secret Milking Machine 最大流 二分答案
- POJ-2455-Secret Milking Machine(无向图--网络流)
- poj 2455 Secret Milking Machine 【二分 + 最大流】 【1到N不重复路径不少于T条时,求被选中路径上的最大边权值 的最小值】
- POJ 2455 Secret Milking Machine(二分+最大流)
- POJ 2455 Secret Milking Machine 最大流建模
- POJ 2455 Secret Milking Machine (二分+无向图最大流)
- poj 2455 Secret Milking Machine(二分枚举+最大流)
- poj 2455 Secret Milking Machine
- POJ 2455 Secret Milking Machine (二分+无向图最大流)