POJ 3204 网络流的必须边
思路: 
求一遍网络流 在残余网络上DFS 
从起点DFS  从终点把边反向DFS 
一个边跟起点连通  跟终点反向的边连通 ans++
注:此题不能用tarjan 因为有边权为0的边
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 555
#define M 10050
int n,m,xx[M],yy[M],zz[M],first[N],vis[N],next[M],v[M],w[M],tot=2;
int dfn[N],low[N],cnt,stk[N],top,T,jy,p[N],ans;
void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int z){Add(x,y,z),Add(y,x,0);}
bool tell(){
    memset(vis,-1,sizeof(vis)),vis[0]=0;
    queue<int>q;q.push(0);
    while(!q.empty()){
        int t=q.front();q.pop();
        for(int i=first[t];~i;i=next[i])
            if(w[i]&&vis[v[i]]==-1)
                q.push(v[i]),vis[v[i]]=vis[t]+1;
    }return vis[n]!=-1;
}
int zeng(int x,int y){
    if(x==n)return y;
    int r=0;
    for(int i=first[x];~i&&y>r;i=next[i])
        if(vis[v[i]]==vis[x]+1&&w[i]){
            int t=zeng(v[i],min(y-r,w[i]));
            w[i]-=t,w[i^1]+=t,r+=t;
        }
    if(!r)vis[x]=-1;
    return r;
}
void dfs(int x,bool f,int col){
    vis[x]=col;
    for(int i=first[x];~i;i=next[i])
        if(!vis[v[i]]&&w[i^f])
            dfs(v[i],f,col);
}
int main(){
    memset(first,-1,sizeof(first));
    scanf("%d%d",&n,&m),n--;
    for(int i=1;i<=m;i++)scanf("%d%d%d",&xx[i],&yy[i],&zz[i]),add(xx[i],yy[i],zz[i]);
    while(tell())while(zeng(0,0x3fffffff));
    memset(vis,0,sizeof(vis)),dfs(0,0,1),dfs(n,1,2);
    for(int i=1;i<=m;i++)if(vis[xx[i]]==1&&vis[yy[i]]==2&&!w[i*2])ans++;
    printf("%d\n",ans);
}
POJ 3204 网络流的必须边的更多相关文章
- POJ 3204 Ikki's Story I - Road Reconstruction
		
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
 - 最小割求法&&可行边和必须边
		
最小割的可行边与必须边 就是在残量网络上跑tarjan 可行边: 满流并且残量网络上不能存在入点到出点的路径 必须边: 满流并且残量网络上入点能从源点到达,出点能到汇点. 任意一种最小割求法: 跑一边 ...
 - POJ 1486 Sorting Slides(寻找必须边)
		
题意:找出幻灯片与编号唯一对应的情况 思路: 1:求最大匹配,若小于n,则答案为none,否则转2 (不过我代码没有事先判断一开始的最大匹配数是否<n,但这样也过了,估计给的数据最大匹配数一定为 ...
 - POJ 3204 Ikki's Story I-Road Reconstruction (网络流关键边)
		
[题意]给定一个N个节点M条边的网络流,求有多少条边,使得当增其中加任何一个边的容量后,整个网络的流将增加. 挺好的一道题,考察对网络流和增广路的理解. [思路] 首先关键边一定是满流边.那么对于一个 ...
 - BZOJ 1797 网络流的可行边&必须边
		
求完网络流以后 tarjan一发 判一判 //By SiriusRen #include <queue> #include <bitset> #include <cstd ...
 - POJ 1149PIGS 网络流 最大流
		
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20421 Accepted: 9320 Description ...
 - Power Network POJ - 1459 [网络流模板]
		
http://poj.org/problem?id=1459 嗯,网络流模板...多源点多汇点的图,超级汇点连发电厂,用户连接超级汇点 Status Accepted Time 391ms Memor ...
 - poj 3204(最小割)
		
题目链接:http://poj.org/problem?id=3204 思路:显然只有增大那最小割边集上的边才能增加最大流,因此,我们可以先跑一遍最大流,然后对于那些满足条件的边u->v,当且仅 ...
 - poj 3469(网络流模版)
		
题目链接:http://poj.org/problem?id=3469 思路:终于把网络流的模版测试好了,在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高,在此贴出自己的 ...
 
随机推荐
- jsoup抓取网页+具体解说
			
jsoup抓取网页+具体解说 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目.我以前在 IBM DW 上发表过两篇关于 htmlparser 的文章.各自 ...
 - wikioi 1306 机智Trie树
			
题目描写叙述 Description 看广播操无聊得非常~你有认为吗?在看广播操一波又一波的人潮涌过再退去.认为非常没意思--于是,偶们的大神犇JHT发明了一个及其好玩的游戏~ 把每一班级的队形看成一 ...
 - poj--2549--Sumsets(二分查找)
			
Sumsets Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Statu ...
 - javascript系列-class7.Date对象
			
1.对象 什么是对象? 对象的类型是Object. JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... javaScript中万事万物皆对象 用官方 ...
 - [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物  [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)
			
题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...
 - mysql表空间传输(ERROR 1808) row_format设置
			
文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上.迁移的时候很方便,尤其是大表. 由于本次达到测试使用版本5.6.38传到5.7 ...
 - (转载)Android中的Service:Binder,Messenger,AIDL(2)
			
前言 前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等.在这一篇博文里有一些需要前一篇铺垫的东西,建 ...
 - 【算法】Dijkstra算法(单源最短路径问题)(路径还原)  邻接矩阵和邻接表实现
			
Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...
 - STM8S103之独立看门狗和窗口看门狗
			
独立看门狗时钟来源为LSI:窗口看门狗时钟来源为CPU: 窗口看门狗窗口的含义是:喂狗必须在一定的窗口期内完成,不能过早也不能过晚. 总结:防止程序复位,用独立看门狗. 独立看门狗使用的流程:参见库函 ...
 - Linux重新命名文件夹
			
linux 重命名文件和文件夹 linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c ...