洛谷$P4126\ [AHOI2009]$最小割 图论
正解:网络流+$tarjan$
解题报告:
$umm$最小割的判定问题$QwQ$,因为并不会做是看的题解才会的,所以也没什么推导过程直接放结论趴$QwQ$
首先跑个最大流,然后有.
1)可行流($x,y$)的充要条件:满流&残余网络中不存在$x$到$y$的路径
2)必然流($x,y$)的充要条件:满流&残余网络中$ST$分别能到达$xy$
证明的话都可以用反证法?
对于1,挺显然的还,就如果存在$x$到$y$的路径,说明并没有割开,显然不属于最小割
对于2,我取一边为例,若$S$不能到达$x$,则说明一定有一条边也能被割开,则可以割开那条边,因此这条边不是必然边.$over$
然后具体体现的话就是.
1)满流&$xy$不属于一个$SCC$中
2)满流&$xy$分别与$ST$属于一个$SCC$中
所以就跑个最大流然后跑个$tarjan$就欧克!$over$
补一个易错点,,,虽然我$jio$得可能就我一个人那么傻逼被这个傻逼的易错点坑了1$h$,,,$QAQ$
就,在用当前弧优化的时候不是要在每次$dinic$中$bfs$后给所有$cur$赋值为$head$嘛,因为我之前一直是$S$是最小$T$是最大所以我就一直打的$for(S,T)$.但是在这题里应该是$for(1,n)$,,,$QAQ$
没了,$over$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define t(i) edge[i].to
#define w(i) edge[i].wei
#define n(i) edge[i].nxt
#define ri register int
#define rb register int
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];~i;i=n(i)) const int N=+,M=+,inf=1e9;
int n,m,dep[N],head[N],cur[N],S,T,ed_cnt=-,dfn[N],low[N],tim,stck[N],tp,bl[N],bl_cnt;
bool instck[N];
struct ed{int to,nxt,wei;}edge[M<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ri x,ri y,ri z)
{edge[++ed_cnt]=(ed){x,head[y],z};head[y]=ed_cnt;edge[++ed_cnt]=(ed){y,head[x],};head[x]=ed_cnt;}
il bool bfs()
{
queue<int>Q;Q.push(S);memset(dep,,sizeof(dep));dep[S]=;
while(!Q.empty()){ri nw=Q.front();Q.pop();e(i,nw)if(w(i) && !dep[t(i)]){dep[t(i)]=dep[nw]+,Q.push(t(i));}}
return dep[T];
}
il int dfs(ri nw,ri flow)
{
if(nw==T || !flow)return flow;ri ret=;
for(ri &i=cur[nw];~i;i=n(i))
if(w(i) && dep[t(i)]==dep[nw]+){ri d=dfs(t(i),min(flow,w(i)));w(i)-=d,flow-=d,ret+=d,w(i^)+=d;}
return ret;
}
il int dinic()
{ri ret=;while(bfs()){rp(i,,n)cur[i]=head[i];while(int d=dfs(S,inf))ret+=d;}return ret;}
il void tarjan(ri x)
{
dfn[x]=low[x]=++tim;stck[++tp]=x;instck[x]=;
e(i,x)if(w(i)){if(!dfn[t(i)])tarjan(t(i)),low[x]=min(low[x],low[t(i)]);else if(instck[t(i)])low[x]=min(low[x],dfn[t(i)]);}
if(!(low[x]^dfn[x])){++bl_cnt;ri tmp;do{tmp=stck[tp--];bl[tmp]=bl_cnt;instck[tmp]=;}while(tmp!=x);}
} int main()
{
//freopen("4126.in","r",stdin);freopen("4126.out","w",stdout);
memset(head,-,sizeof(head));n=read();m=read();S=read();T=read();
rp(i,,m){ri x=read(),y=read(),z=read();ad(y,x,z);}dinic();
rp(i,,n)if(!dfn[i])tarjan(i);
rp(i,,m)
{
ri ed_nam=(i-)<<;
if(w(ed_nam)){printf("0 0\n");continue;}
if(bl[t(ed_nam)]^bl[t(ed_nam^)])printf("1 ");else printf("0 ");
if(bl[t(ed_nam)]^bl[T] || bl[t(ed_nam^)]^bl[S])printf("0\n");else printf("1\n");
}
return ;
}
洛谷$P4126\ [AHOI2009]$最小割 图论的更多相关文章
- 洛谷P4126 [AHOI2009]最小割
题目:洛谷P4126 [AHOI2009]最小割 思路: 结论题 在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号.显然有id[s]!=id[t](否则s到t有通路,能继续 ...
- P4126 [AHOI2009]最小割
题目地址:P4126 [AHOI2009]最小割 最小割的可行边与必须边 首先求最大流,那么最小割的可行边与必须边都必须是满流. 可行边:在残量网络中不存在 \(x\) 到 \(y\) 的路径(强连通 ...
- P4126 [AHOI2009]最小割(网络流+tarjan)
P4126 [AHOI2009]最小割 边$(x,y)$是可行流的条件: 1.满流:2.残量网络中$x,y$不连通 边$(x,y)$是必须流的条件: 1.满流:2.残量网络中$x,S$与$y,T$分别 ...
- POJ 2914 Minimum Cut 最小割图论
Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
- 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码
洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...
- 【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)
洛谷 题意: 题意好绕好绕...不想写了. 思路: 首先类似于分数规划做法,二分答案得到到每个点的最小危险度. 然后就是在一个二分图中,两边撤掉最少的点(相应代价为上面算出的危险度)及相应边,使得中间 ...
- 【洛谷P3329】 [ZJOI2011]最小割(最小割树)
洛谷 题意: 给出一个无向图,之后有\(q,q\leq 30\)组询问,每组询问有一个\(x\),回答有多少点对\((a,b)\)其\(a-b\)最小割不超过\(x\). 思路: 这个题做法要最小割树 ...
- 【洛谷P3973】[TJOI2015]线性代数(最小割)
洛谷 题意: 给出一个\(n*n\)的矩阵\(B\),再给出一个\(1*n\)的矩阵\(C\). 求一个\(1*n\)的\(01\)矩阵\(A\),使得\(D=(A\cdot B-C)\cdot A^ ...
随机推荐
- 是readdir,还是readdir_r
readdir的原型如下: struct dirent *readdir(DIR *dirp); 因为内部使用了静态数据,所以readdir被认为不是线程安全的函数,POSIX[i]标准这样描述: T ...
- vue element 中自定义传值
一直以来都不知道如何传自定义的值,一直只会默认的,今天终于找到方法了. 比如这个上传图片的控件,想带当前的index过去,就这样写.其它的类似 :http-request="(file,fi ...
- jqLite
一.关于DOM导航的jqLite方法 children() 返回一组子元素.这个方法的jqLite实现不支持jQuery所提供的选择器特性 eq(index) 从一个元素集合中返回指定索引下的元素 f ...
- ACM感想、
从15年10月开始搞ACM,到如今的16年4月底,已经接近半年了. 大一下学期开始ACM组的人员就不断减少,有的因为坚持不下,有的因为不喜欢,有的没留下理由就走了, 瞬间感觉实验室空了很多很多.现在常 ...
- PHP调用纯真IP数据库返回具体地址
function convertip($ip) { $ip1num = 0; $ip2num = 0; $ipAddr1 =""; $ipAddr2 =""; ...
- Python--day67--Jsonresponse响应介绍和路由系统的分组命名匹配方式(简单介绍)
1,Jsonresponse响应介绍: ,2,路由系统的分组命名匹配方式:(简单介绍)
- [全+转载] solaris 网络配置
===================== 较为重要的几个文件: /etc/nodename 主机名(即 hostname命令的输出) /etc/defaul ...
- 从零开始学习Kafka
简介 kafka是一个分布式消息队列.具有高性能.持久化.多副本备份.横向扩展能力.生产者往队列里写消息,消费者从队列里取消息进行业务逻辑.一般在架构设计中起到解耦.削峰.异步处理的作用. Kafka ...
- H3C 衡量路由协议的主要指标
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(6)之配置文件设置
现在该有的结构和层级都有了,下面我们就开始实际应用,首先把需要用的js,css,图片放到Content文件夹中. 这里不详细讲解,大家可根据自己的实际情况,使用合适自己的前端框架,也可以点击下载本项目 ...