题目大意:一个无向图,求所有点对不同的最小割种类数

最小割最多有n-1个,这n-1个最小割构成一个最小割树

分治法寻找n-1个最小割。对于当前点集X,任选两点为ST做最小割,然后找出与S相连的所有点和与T相连的所有点构成S集与T集,更新S集与T集的最小割。然后递归处理两个集合。

最后将最小割排序,找出有多少不同最小割即可

#include<bits/stdc++.h>
#define inf 0x7ffffff
using namespace std;
inline int read(){int s=0;char ch=getchar();for(;ch<'0'||ch>'9';ch=getchar());for(;ch>='0'&&ch<='9';ch=getchar())s=s*10+ch-'0';return s;
}
struct edge{int to,next;int cap;
}G[20010];
int tot=1,h[1000],S,T;
void add(int x,int y,int z){tot++;G[tot].to=y;G[tot].next=h[x];G[tot].cap=z;h[x]=tot;
}
int vis[1000],mark[1000];
int a[1000];
int n,m;
set<int>s;
bool bfs(){memset(vis,0,sizeof(vis));queue<int>Q;Q.push(S);vis[S]=1;while(!Q.empty()){int u=Q.front();Q.pop();for(int i=h[u];i;i=G[i].next){int v=G[i].to;if(vis[v]||G[i].cap<=0)continue;vis[v]=vis[u]+1;Q.push(v);}}return vis[T];
}
int dfs(int u,int w){if(u==T||w==0)return w;int flow=0;for(int i=h[u];i;i=G[i].next){int v=G[i].to;if(vis[v]!=vis[u]+1||G[i].cap<=0)continue;if(int t=dfs(v,min(w,G[i].cap))){G[i].cap-=t;G[i^1].cap+=t;flow+=t;w-=t;if(!w)break;}}if(!flow)vis[u]=0;return flow;
}
int dinic(){int f=0;while(bfs())f+=dfs(S,inf);return f;
}
void dfs(int x){mark[x]=1;for(int i=h[x];i;i=G[i].next)if(G[i].cap&&!mark[G[i].to])dfs(G[i].to);
}
void clear(){for(int i=2;i<=tot;i+=2)G[i].cap=G[i^1].cap=(G[i].cap+G[i^1].cap)/2;
}
int tmp[1000];
void solve(int l,int r){if(l==r)return;clear();S=a[l],T=a[r];int t=dinic();s.insert(t);memset(mark,0,sizeof(mark));dfs(S);int L=l,R=r;for(int i=l;i<=r;++i)if(mark[a[i]])tmp[L++]=a[i];else tmp[R--]=a[i];for(int i=l;i<=r;++i)a[i]=tmp[i];solve(l,L-1);solve(R+1,r);
}
int main(){n=read();m=read();for(int i=1;i<=m;++i){int u=read(),v=read(),w=read();add(u,v,w);add(v,u,w);}for(int i=1;i<=n;++i)a[i]=i;solve(1,n);printf("%d\n",s.size());return 0;
}

View Code

转载于:https://www.cnblogs.com/117208-/p/5381700.html

CQOI 2016 不同的最小割相关推荐

  1. JZOJ 5495 MiniumCut (最小割树)

    MiniumCut Description 从前有张图. 图里 n 个顶点两两之间有 n2n2n^2 种最小割. 告诉你这 n2n2n^2 个最小割. 还原出这张图. Input 第一行一个正整数 n ...

  2. 分治最小割 学习总结

    这是一种可以较快的求解任意两点间最小割的算法 正常的暴力的话我们要枚举点对,一共要做O(n^2)次网络流 而我们注意到设某一个S->T最小割中两个点x,y,满足x在S集合且y在T集合中 设S-& ...

  3. 【BZOJ1001】狼抓兔子,平面图转对偶图(从最小割到最短路)

    Time:2016.08.18 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 显然这个题是求这个图的最小割 在这个n*m个点,2*(n*(m-1)+(n-1)m+(n-1)(m-1 ...

  4. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  5. [学习笔记]最小割之最小点权覆盖最大点权独立集

    最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...

  6. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

  7. 最小割 ---- 2021 ccpc 威海 H city-safety(最大利润 = 最大收益 - 最小花费(最小割))

    题目链接 题目大意: 一棵树,加强第 iii 个点有 wiw_iwi​ 的花费,而如果距离某 个点 ≤p≤ p≤p 的所有点都加强了,则会有 vpv_pvp​ 的收益,求最大净收益. 解题思路: 树形 ...

  8. 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness

    题面: 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科 ...

  9. 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)

    二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...

最新文章

  1. python快速小教程
  2. 《DBA修炼之道:数据库管理员的第一本书》——1.4节评估DBA的工作邀请
  3. js——全选框 checkbox
  4. complex--创建复数
  5. 网络路径无法访问问题的解决
  6. 接口自动化测试系列(二):深入分析HTTP状态码502
  7. mysql主从代替技术_mysql主从复制及失败切换
  8. Magento教程 24:如何发送电子报! (Newsletter)
  9. 斗地主AI算法——第十五章の测试模块
  10. 华为交换机静态路由配置案例_快速了解配置三层交换机策略路由配置
  11. 打造创新电磁诊疗技术平台,睿笛生物获比邻星创投、三捷资本数千万元投资...
  12. flotherm热仿真,allegro怎么导出flotherm文件
  13. ALOHA协议与CSMA协议
  14. ant app 心电监测_电话传输心电图监测在心血管疾病及远程医疗中的应用
  15. 【机器学习】强化学习算法的优化
  16. Unity3DCPU优化方法相关理论知识
  17. 忠魁互联网站SEO优化的外链建设方法
  18. 计算机网络时有时无,电脑WiFi时有时无不稳定的解决方法 | 我爱分享网
  19. 【2019-2020春学期】数据库作业9:SQL练习6 - INSERT / UPDATE / DELETE / NULL / VIEW
  20. 依赖树(dependecyTree)-语义边、两个词语之间的依赖边路径

热门文章

  1. 到退休单位没有通知,半年后通知退休,这半年是否算工龄?
  2. 普通人赚钱方法,千万别想靠创业,就能一次翻身
  3. 个人事业实现突破的关键点
  4. 怎么判断自己是不是备胎 ?
  5. 杜月笙的六句忠告,学会了不吃亏
  6. Wmware安装Centos7教程
  7. ssis 有条件拆分_SSIS条件拆分概述
  8. Scrapy框架的介绍和基本使用
  9. CSS之cacl()函数
  10. 2018-2019-2 网络对抗技术 20165314 Exp7 网络欺诈防范