正解:网络流+$tarjan$

解题报告:

传送门$QwQ$

$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]$最小割 图论的更多相关文章

  1. 洛谷P4126 [AHOI2009]最小割

    题目:洛谷P4126 [AHOI2009]最小割 思路: 结论题 在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号.显然有id[s]!=id[t](否则s到t有通路,能继续 ...

  2. P4126 [AHOI2009]最小割

    题目地址:P4126 [AHOI2009]最小割 最小割的可行边与必须边 首先求最大流,那么最小割的可行边与必须边都必须是满流. 可行边:在残量网络中不存在 \(x\) 到 \(y\) 的路径(强连通 ...

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

    P4126 [AHOI2009]最小割 边$(x,y)$是可行流的条件: 1.满流:2.残量网络中$x,y$不连通 边$(x,y)$是必须流的条件: 1.满流:2.残量网络中$x,S$与$y,T$分别 ...

  4. POJ 2914 Minimum Cut 最小割图论

    Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...

  5. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  6. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

  7. 【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)

    洛谷 题意: 题意好绕好绕...不想写了. 思路: 首先类似于分数规划做法,二分答案得到到每个点的最小危险度. 然后就是在一个二分图中,两边撤掉最少的点(相应代价为上面算出的危险度)及相应边,使得中间 ...

  8. 【洛谷P3329】 [ZJOI2011]最小割(最小割树)

    洛谷 题意: 给出一个无向图,之后有\(q,q\leq 30\)组询问,每组询问有一个\(x\),回答有多少点对\((a,b)\)其\(a-b\)最小割不超过\(x\). 思路: 这个题做法要最小割树 ...

  9. 【洛谷P3973】[TJOI2015]线性代数(最小割)

    洛谷 题意: 给出一个\(n*n\)的矩阵\(B\),再给出一个\(1*n\)的矩阵\(C\). 求一个\(1*n\)的\(01\)矩阵\(A\),使得\(D=(A\cdot B-C)\cdot A^ ...

随机推荐

  1. Keycode对照表(键码对照表)

    https://segmentfault.com/a/1190000005828048 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S ...

  2. 8-2udp和tcp网络编程以及粘包和解决粘包的方法

    一  tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...

  3. PyODPS DataFrame 处理笛卡尔积的几种方式

    PyODPS 提供了 DataFrame API 来用类似 pandas 的接口进行大规模数据分析以及预处理,本文主要介绍如何使用 PyODPS 执行笛卡尔积的操作. 笛卡尔积最常出现的场景是两两之间 ...

  4. AFNetworkingErrorDomain 错误

    AFNetworking and POST Request I'm getting this response in error.userInfo while making a POST reques ...

  5. JVM参数详细列表

    -client :设置JVM使用client模式,特点启动较快(神机不明显(I5/8G/SSD)) -server :设置JVM使用server模式.64位JDK默认启动该模式 -agentlib:l ...

  6. @bzoj - 4379@ [POI2015] Modernizacja autostrady

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵无根树,边权都是1,请去掉一条边并加上一条新边,定义直径 ...

  7. 带你进入 Activiti 工作流的世界

    Activiti 是一个针对企业用户.开发人员 .系统管理员的轻量级工作流业务管理平台,其核心是使用 java 开发的快速 . 稳定的 BPMN2.0 流程引擎 .它可以与 spring 完美集成. ...

  8. SuperSocket 中的日志系统

    当 SuperSocket boostrap 启动时,日志系统将会自动启动. 所以你无须创建自己的日志工具,最好直接使用SuperSocket内置的日志功能. SuperSocket 默认使用log4 ...

  9. Python--day65--模板语言之变量相关语法

    Django的模板语言: 1.目前已经学过的模板语言: 2,模板语言总结: 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Djan ...

  10. dotnet 设计规范 · 抽象定义

    严格来说,只有一个类被其他的类继承,那么这个类就是基类.在很多时候,基类的定义是提供足够的抽象和通用方法和属性.默认实现.在继承关系中,基类定义在上层抽象和底层自定义之间. 他们充当抽象实现的实现帮助 ...