继续填坑了,啦啦啦

这道题本来是准备枚举每个边,暂时去除它,但发现时间会爆炸的

于是决定另辟蹊径

于是这篇题解就应运而生

首先还是网络流跑一边 毕竟题目叫最小割嘛,给个面子

然后跑一边tarjan对满流的边处理掉,即不相连

之后对每条边进行判断,如果当前的边流量为0并且始末点不在一个集合,那么就满足第一个条件了

若始末点于源点汇点为同一个集合,那么就满足第二个条件了

不然的话直接输出0 0 即可

题面

#include<bits/stdc++.h>
using namespace std;
const int N=4e5+7;
const int INF=0x7f7f7f;
int m,n,k,s,t,cnt=1,mx,ans,idx;
int dep[N],head[N],dfn[N],low[N],color[N],sum[N],num;
bool vis[N];
stack<int> st;
struct edge
{int nx,to,flow,from;
} e[N];
void add_edge(int a,int b,int flow)
{cnt++;e[cnt].flow=flow;e[cnt].nx=head[a];e[cnt].to=b;e[cnt].from=a;head[a]=cnt;cnt++;e[cnt].flow=0;e[cnt].nx=head[b];e[cnt].to=a;e[cnt].from=b;head[b]=cnt;
}
bool bfs(int s,int t)
{memset(dep,0,sizeof(dep));queue<int> que;dep[s]=1;que.push(s);while (!que.empty()){int x=que.front();que.pop();for (int i=head[x];i;i=e[i].nx){int y=e[i].to;if (dep[y]==0&&e[i].flow){dep[y]=dep[x]+1;que.push(y);}}}if (dep[t]==0) return false;else return true;
}
void paint(int x)
{st.pop();color[x]=num;sum[num]++;vis[x]=false;
}
void tarjan(int x)
{dfn[x]=low[x]=++idx;st.push(x);vis[x]=true;for (int i=head[x];i;i=e[i].nx){if (e[i].flow==0) continue;int y=e[i].to;if (!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if (vis[y]) low[x]=min(low[x],dfn[y]);}if (dfn[x]==low[x]){num++;while (st.top()!=x){int t=st.top();paint(t);}paint(x);}
}
int dfs(int x,int limit,int t)
{if (x==t) return limit;int used=0;for (int i=head[x];i;i=e[i].nx){int y=e[i].to;if (dep[y]==dep[x]+1&&e[i].flow){int di=dfs(y,min(limit-used,e[i].flow),t);if (di>0){e[i].flow-=di;e[i^1].flow+=di;used+=di;if (used==limit) return limit;}}}if (!used) dep[x]=-2;return used;
}
void dinic(int s,int t)
{while (bfs(s,t)) ans+=dfs(s,INF,t);
}
int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);for (int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);add_edge(x,y,z);}dinic(s,t);mx=ans;for (int i=1;i<=n;i++)if (!color[i]) tarjan(i);for (int i=2;i<cnt;i+=2){int x=e[i].from,y=e[i].to;if (color[x]!=color[y]&&e[i].flow==0){printf("1 ");if (color[x]==color[s]&&color[y]==color[t]) printf("1");else printf("0");}else printf("0 0");printf("\n"); }return 0;
}

转载于:https://www.cnblogs.com/Hale522520/p/10642073.html

[AHOI2009]最小割(最大流+tarjan)相关推荐

  1. [AHOI2009]最小割【最小割+Tarjan】

    题目链接 P4126 [AHOI2009]最小割 将题目拆解成两个问题,我们分别进行求解. 可以作为最小割的边 如果它可以是最小割中的边的话,首先它需要满足的是流过它的流是满流的,这是因为如果它被割去 ...

  2. 【BZOJ1797】[AHOI2009]最小割(网络流)

    [BZOJ1797][AHOI2009]最小割(网络流) 题面 BZOJ 洛谷 题解 最小割的判定问题,这里就当做记结论吧.(源自\(lun\)的课件) 我们先跑一遍最小割,求出残量网络.然后把所有还 ...

  3. P4126 [AHOI2009]最小割(网络流/最小割)

    P4126 [AHOI2009]最小割 https://www.cnblogs.com/dugudashen/p/6228304.html 求解一张有向图中关于最小割的可行边和必须边,可行边定义为存在 ...

  4. hdu 4289(最小割最大流定理)

    题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,不过封锁城市是需要 ...

  5. HDU-1569 方格取数(2) 最小割最大流

    题义很简单,还记得方格取数(1)的时候,使用状态压缩写的,这里由于行列数太大,因此无法进行压缩.所以要运用的最小割最大流的思想来解这道题. 大概是这样分析的,题义是要我们求在一个方格内取出N个点,使得 ...

  6. Destroying The Graph 最小点权集--最小割--最大流

    Destroying The Graph 构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), ...

  7. 网络流 最大流 最小割 费用流

    [腾讯文档]网络流初步 网络流初步 文章目录 网络流初步 一.网络流简介 1. 网络 2. 流 3. 再次理解网络流 二.常见题型(三种) 三.相关问题对应算法介绍 1.最大流 (1) FF算法 - ...

  8. 图像分割经典算法--《最小割最大流》(Minimum Cut——Max Flow)

    1.算法介绍 最小割算法(Minimum Cut)是图像分割的经典算法之一,同时也在"Graph Cut"."Grab Cut"等算法中都有被使用过.最小割最大 ...

  9. P4126-[AHOI2009]最小割【网络流,tarjan】

    正题 题目链接:https://www.luogu.com.cn/problem/P4126 题目大意 给出nnn个点mmm条边的一张有向图和起点终点.对于每条边求其是否是最小割的可行割/必须割 1≤ ...

最新文章

  1. 黑马程序员——11 正则表达式
  2. sublime运行前自动保存代码(转)
  3. 如何处理 Hybris Accelerator css style 显示不正确的问题
  4. nodeJS — 学习的笔记
  5. 猫眼电影评论_电影的人群意见和评论家的意见一样好吗?
  6. 机器学习爬大树之决策树(CART与剪枝)
  7. 电子科技大学计算机2019报名人数,电子科技大学录取分数线2019(在各省市录取数据)...
  8. angularjs java 实例_[Java教程]angularjs小练习(分别通过ng
  9. 编写一个班级管理程序java_java课程设计(班级管理系统)
  10. 基于springboot网上商城交易平台源码
  11. xiuno4.0 火车头发布模块一Web登陆版
  12. cogs 944. [東方S3] 藤原妹红
  13. com.netflix.client.ClientException: Load balancer does not have available server for client: userser
  14. java模板velocity,java模板引擎:velocity
  15. 广数25i系统倒刀回刀m代码_GSK-25i数控铣床加工中心系统介绍
  16. 启动/关闭oracle服务有三种方式
  17. [18调剂]东南大学 苏州联合研究生院接收调剂信息
  18. 心灵鸡汤 - sixth (6th)
  19. 出品公司 发行公司 院线的区别
  20. 怎么把音乐的伴奏提取出来?分享几个音乐伴奏提取的方法!

热门文章

  1. Python3 爬虫实战 — 58同城武汉出租房【加密字体对抗】
  2. Python3 已经安装相关库,Pycharm 仍然报错 ModuleNotFoundError: No module named 'xxxxxx' 的解决办法
  3. 【CodeForces - 124C】Prime Permutation(数学,思维,小结论)
  4. 【HDU - 2665】Kth number(区间第K大,主席树,模板)
  5. java的et5_Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
  6. php 修改文件属性命令行,Linux_linux中如何通过命令修改文件属性,ls -l即可查看目录信息-rw - phpStudy...
  7. alert 回调_JavaScript中到底什么时候回调函数Callback
  8. dvwa详解_DVWA(六):XSSReflected 反射型XSS全等级详解
  9. HTML中scr是图片的什么,HTML中关于url、scr、href的区别
  10. sql server查询历史进程_学习笔记 | SequoiaDB SQL查询语句执行过程