传送门

最小割定理我虽然说不太准,但大概就这个意思:对求完最大流后的残图进行tarjin,如果一条边的起点和终点不属于一个强连通分量,则这条边属于最大流。

联系一下,直接A

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define inf 10000000
#include<queue>
using namespace std;
int n,m,S=0,T,e,s,adj[100200],dep[100200];
int zhan[100005],inzhan[100005],dfn[100005],low[100005],tot,head,cnt;
int belong[100005],vis[100005];
struct node
{int u,v,l,next;
} a[400005];
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
void add(int u,int v,int l)
{a[e].l=l;a[e].v=v;a[e].u=u;a[e].next=adj[u];adj[u]=e++;
}
int bfs()
{memset(dep,0,sizeof(dep));queue<int> q;q.push(S);dep[S]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=adj[x];i!=-1;i=a[i].next){int to=a[i].v;if(!dep[to]&&a[i].l){dep[to]=dep[x]+1;q.push(to);if(to==T)return 1;}}}return 0;
}
int dfs(int x,int len)
{int tmp=len,k;if(x==T)return len;for(int i=adj[x];i!=-1;i=a[i].next){int to=a[i].v;if(dep[to]==dep[x]+1&&a[i].l&&tmp){k=dfs(to,min(a[i].l,tmp));if(!k){dep[to]=0;continue;}a[i].l-=k;a[i^1].l+=k;tmp-=k;}} return len-tmp;
}
void tarjin(int x)
{//vis[x]=1;zhan[++head]=x;inzhan[x]=1;dfn[x]=low[x]=++tot;for(int i=adj[x];i!=-1;i=a[i].next)if(a[i].l&&inzhan[a[i].v]<2){int to=a[i].v;if(!inzhan[to]){tarjin(to);low[x]=min(low[x],low[to]);  }else if(inzhan[a[i].v]==1)low[x]=min(low[x],dfn[a[i].v]);}if(dfn[x]==low[x]){cnt++;int tmp;while(1){tmp=zhan[head--];belong[tmp]=cnt;inzhan[tmp]=2;if(tmp==x)break;}}
}
int yjn()
{freopen("sphere.in","r",stdin);freopen("sphere.out","w",stdout);scanf("%d%d",&n,&m);memset(adj,-1,sizeof(adj));int x,y;for(int i=1;i<=m;i++){x=read();y=read();add(x,y,1);add(y,x,0);}T=n+1;for(int i=1;i<=n;i++)if(i<=n/2)add(S,i,1),add(i,S,0);else add(i,T,1),add(T,i,0);while(bfs())dfs(S,inf);for(int i=S;i<=T;i++)if(inzhan[i]<2)tarjin(i);s=0;for(int i=0;i<m;i++)if(a[i*2].l==0&&belong[a[i*2].u]!=belong[a[i*2].v])s++;cout<<s;
}
int qty=yjn();
int main(){;}

最小割+强连通分量 COGS 426 血帆海盗相关推荐

  1. [补档][COGS 426]血帆海盗

    [COGS 426]血帆海盗 题目 传送门: http://cogs.pro/cogs/problem/problem.php?pid=426 随着资本的扩大,藏宝海湾贸易亲王在卡利姆多和东部王国大陆 ...

  2. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  3. HDU 3861 The King’s Problem 强连通分量 最小路径覆盖

    先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...

  4. 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割

    这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...

  5. 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会

    先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...

  6. BZOJ 3894 Luogu P4313 文理分科 (最小割)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3894 (luogu) https://www.luogu.org/pro ...

  7. 边与最小割(bzoj 1797: [Ahoi2009]Mincut 最小割)

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2471  Solved: 1067 [Subm ...

  8. bzoj1797 最小割唯一性问题

    题目大意 有两问: 判断一条边是否可以在最小割中: 判断一条边是否一定在最小割中. 做法: 首先做一遍最大流得到残量网络. 第一问 对于第一问,我们设这条边为 (u,v) (u,v). 则残量网络上从 ...

  9. 模板 - 最小割(常见最小割题型技巧总结)

    整理的算法模板合集: ACM模板 目录 一.集合划分模型 二.点边转化 三.最小割的可行边与必须边 四.二分图的可行边和必须边 五.平面图最小割 六.最小割的一些小技巧 1.记录划分方案 2.求割边数 ...

最新文章

  1. android中一种不支持的lua操作
  2. socket绑定指定网卡发包
  3. 使用mac m1跑fortran代码hello world
  4. 计算机科学计算第二版第四章,大连理工大学 计算机科学计算 第四章2.pdf
  5. 步苹果iOS的后尘,谷歌Android12“翻车”,更新需谨慎?
  6. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 图像分类
  7. 如何用ARKit将太阳系装进iPhone(二)
  8. Avoided redundant navigation to current location
  9. ##MySql数据库的增删改查方法
  10. 未来5年中国企业信息化格局
  11. java中no enclosing instance of type * is accessible的解决方法
  12. bt709和srgb_选择用于多用途视频编辑和色彩校正的显示器— sRGB,DCI-P3,REC 709
  13. 计算机动漫与游戏制作心得,学习课件制作的心得体会(精选10篇)
  14. .net core快速开发平台,learun自主工作流引擎设计规范
  15. 虚拟机VMware 15安装教程
  16. 如何更改PDF文件中的字体?
  17. c语言简单的图案设计,分形艺术图案设计
  18. Leetcode #1 Two Sum
  19. 21种低成本的方式,帮助企业获得关注
  20. 图的邻接矩阵存储(简单代码实现)

热门文章

  1. linux 僵尸进程查看及删除
  2. Python的虚拟环境(venv)是什么?
  3. 达达php源码,【达达前端】Ajax实战项目源码讲解(快速入门的实例)Github源码...
  4. 实验一 /*被动扫描,利用搜索引擎或相关网站*/
  5. 《软件工程》个人总结
  6. 苹果8p电池多少毫安的_给苹果8p用12w的充电器充电会怎么样?会不会对电池不好?-苹果...
  7. 全国青少年电子信息智能创新大赛(决赛)python·模拟四卷,含答案解析
  8. 异步编程原理以及Java实现
  9. 4:2:0编码_教游戏编码:Codewars和CodeCombat的回顾
  10. 豪车阵容强大 电影与车之《极品飞车》