poj 3084 Dinic
来源:互联网 发布:mac终端命令保存退出 编辑:程序博客网 时间:2024/06/02 03:37
import java.util.*;public class Main { public static int nodes, sink; public static int[][] map = new int[30][30]; public static int[] level = new int[30]; public static StringBuilder sb = new StringBuilder(); public static boolean bfs(){ Arrays.fill(level, -1); Queue<Integer> q = new LinkedList<Integer>(); q.add(nodes); level[nodes] =0; while(!q.isEmpty()){ int tmp = q.poll(); for(int i=0;i<=nodes;i++){ if(level[i]==-1&&map[tmp][i]>0){ level[i] = level[tmp]+1; q.add(i); } } } return level[sink] != -1; } public static int dfs(int start_node, int cap){ int tmp = cap; if(start_node==sink) return cap; for(int i=0;i<=nodes;i++){ if(level[i]==level[start_node]+1 &&tmp>0&&map[start_node][i]>0){ int flow = dfs(i,Math.min(tmp, map[start_node][i])); map[start_node][i]-=flow; map[i][start_node]+=flow; tmp-=flow; } } return cap - tmp; } public static void dinic(){ int result=0; while(bfs()){ result+=dfs(nodes,10000000); } if(result<10000000){ sb.append(result).append("\n"); }else{ sb.append("PANIC ROOM BREACH\n"); } } public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); int cases = scan.nextInt(); for(int i=0;i<cases;i++){ map = new int[30][30]; nodes = scan.nextInt(); sink = scan.nextInt(); for(int j=0;j<nodes;j++){ if(scan.next().equals("I")){ map[nodes][j] = 10000000; } int num = scan.nextInt(); while(num-->0){ int t = scan.nextInt(); map[j][t] = 10000000; map[t][j]++; } } dinic(); } System.out.println(sb.toString()); }}
这个Dinic我认为算是写的比较清楚的了,当然也参考了Dinic的模板,第一次写我可写不出这样的代码
Dinic把BFS, DFS一起用上找并更新增广路径,很犀利
- poj 3084 Dinic
- poj 3084 dinic最大流
- poj 1273 Dinic
- POJ 1273 Dinic
- POJ 1087 UNIX dinic
- POJ 2112 二分+dinic
- POJ 2455 dinic
- poj 1149 PIGS (dinic)
- POJ 3281 Dining dinic
- POJ Power Network (dinic)
- poj 1273 dinic
- POJ 1273&Dinic解决
- POJ 3189 二分+Dinic
- poj 3281 Dinic模版题
- poj 1273(dinic....基础题)
- poj 3281(dinic+拆点)
- POJ 1273 最大流 Dinic
- POJ 1459 Power Network DINIC
- 【我的应用系列】(一)设计线程池处理并发
- Android OTA升级(1):编译升级全包
- RedHat Enterprise AS 5 安装号
- WINCE6.0文件系统及存储管理器
- hdu_Palindromes _easy version_解题报告
- poj 3084 Dinic
- 再谈MMX优化
- hadoop管理NameNode AND SecondaryNameNode
- 银行有个存有n个用户编号的文件....输出:n个数升序排列....
- MMX及SSE优化--SSE篇
- 第一天,2013-03-31,我回来了,懒惰的我
- win7环境下配置JDK安装maven
- 预编译指令
- 关于幸福 理想