最小割的好题,可用作模板。

//Dinic+枚举字典序最小的最小割点集
//Time:1032Ms Memory:1492K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; #define MAXN 205
#define INF 0x3f3f3f3f int N, S, T;
int s,t;
int sres[2*MAXN][2*MAXN]; //source-res
int res[2*MAXN][2*MAXN];
int d[2*MAXN];
int cut[MAXN]; //最小割点集
bool v[2*MAXN]; bool bfs()
{
memset(d, -1, sizeof(d));
queue<int> q;
q.push(s); d[s] = 0;
while(!q.empty() && d[t] == -1){
int cur = q.front(); q.pop();
for(int i = 1; i <= t; i++)
{
if(d[i] == -1 && res[cur][i])
{
d[i] = d[cur] + 1;
q.push(i);
}
}
}
return d[t] != -1;
} int dfs(int x, int sum)
{
if(x == t || sum == 0) return sum;
int src = sum;
for(int i = 1; i <= t; i++)
{
if(d[i] == d[x] + 1 && res[x][i])
{
int tmp = dfs(i, min(sum, res[x][i]));
res[x][i] -= tmp;
res[i][x] += tmp;
sum -= tmp;
}
}
return src - sum;
} int Dinic()
{
memcpy(res, sres, sizeof(sres));
int maxFlow = 0;
while(bfs())
maxFlow += dfs(s,INF);
return maxFlow;
} int main()
{
//freopen("in.txt", "r", stdin); while(~scanf("%d%d%d", &N,&S,&T))
{
memset(sres, 0 ,sizeof(sres));
s = 0; t = 2*N+1;
sres[0][S] = sres[T+N][t] = INF;
for(int i = 1; i <= N; i++)
{
sres[i][i + N] = 1;
for(int j = 1; j <= N; j++)
{
int num;
scanf("%d", &num);
if(num && i != j) sres[i+N][j] = INF;
}
}
sres[S][S+N] = sres[T][T+N] = INF;
int ans = Dinic();
if(ans == INF){ //不可分开
printf("NO ANSWER!\n");
continue;
}
else {
printf("%d\n", ans);
if(ans == 0) continue; //已经分开
} //枚举最小割点集
int len = 0, tmp = ans;
for(int i = 1; i <= N && tmp; i++)
{
if(i == S || i == T) continue;
if(res[i][i+N]) continue;
sres[i][i+N] = 0;
int k = Dinic();
if(k != tmp){
tmp = k;
cut[len++] = i;
}
else sres[i][i+N] = 1;
}
for(int i = 0; i < ans - 1; i++)
printf("%d ", cut[i]);
printf("%d\n", cut[ans-1]);
} return 0;
}

ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)的更多相关文章

  1. hdu 4289 网络流拆点,类似最小割(可做模板)邻接矩阵实现

    Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. ACM/ICPC 之 Dinic算法(POJ2112)

    Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...

  3. ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

    //匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...

  4. [C++]最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

    Question 例题3-5 最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583) 如果x+x的各个数字之和得到y,就是说x是y的生成元.给出n( ...

  5. BZOJ 1050 旅行comf(枚举最小边-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...

  6. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  7. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  8. ACM ICPC Kharagpur Regional 2017

    ACM ICPC Kharagpur Regional 2017 A - Science Fair 题目描述:给定一个有\(n\)个点,\(m\)条无向边的图,其中某两个点记为\(S, T\),另外标 ...

  9. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

随机推荐

  1. Android系统中应用的安装和卸载的监听

    一.创建一个类继承BroadcastReceiver并且复写onReceive的方法 public class AppStateReceiver extends BroadcastReceiver { ...

  2. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  3. 常用的shell脚本

    [root@WEB1-live sh]# cat licai_fabu.sh #!/bin/bash pid=` ps -ef | grep java | grep '8011' | awk '{pr ...

  4. jQuery的页面载入

    jQuery 页面载入 $(document).ready(function(){ //程序段 }) 原生javaScript window.onload = function(){ //程序段 } ...

  5. thinkcmf导航制作

    <?php $tree = sp_get_menu_tree('main'); ?> <foreach name="tree" item="vo&quo ...

  6. Javascript自执行匿名函数(function() { })()的原理分析

    匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...

  7. Matlab中^2和.^2的区别

    矩阵a a^2 --  两个矩阵相乘 a.^2  --  表示 矩阵对应位置相乘 如下: a=[ 1,2,3 4,5,6 7,8,9]; disp(a); disp(a^2); disp(a.^2); ...

  8. PHP build notes - WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, min: 204, excluded: 3.0).

     WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, ...

  9. java重置定时器频率

    public class BallUtil { public static Timer fisTimer ; public static void fisStartBall(){ long first ...

  10. leetcode

    Coding on LeetCode Online Judge leetcode(leetcode website) Problems algorithms 13. Roman to Integer ...