ECNU1101-Dinic
题意:从起点到终点有几条特殊路径。
特殊路径指的是:对于任意两条路径,他们的与起点相连的点是不同的点 && 与终点的相连的点是不同的点。

/*
题意:从起点到终点有几条特殊路径。
特殊路径指的是:对于任意两条路径,他们的与起点相连的点是不同的点 && 与终点的相连的点是不同的点。
思路:
把起点和后继节点的流量设置为1,同理对终点处理
这样在寻找最大流的增广路径时就会消除一条。。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
const int maxn = ;
const int maxm = maxn*maxn;
const int inf = 0x3f3f3f3f;
struct Edge{
int u,v,next,val;
}edge[ maxm ];
int cnt,head[ maxn ];
int q[ maxn+ ];
int lev[ maxn+ ]; void init(){
cnt = ;
memset( head,-,sizeof( head ) );
}
void addedge( int a,int b,int c ){
edge[ cnt ].u = a;
edge[ cnt ].v = b;
edge[ cnt ].val = c;
edge[ cnt ].next = head[ a ];
head[ a ] = cnt ++;
} bool bfs( int src,int dest,int n ){
int head2 = ,tail2 = ;
q[ tail2++ ] = src;
memset( lev,-,sizeof( lev ) );
lev[ src ] = ;
while( head2<tail2 ){
int cur = q[ head2++ ];
for( int i=head[ cur ];i!=-;i=edge[ i ].next ){
int nxt = edge[ i ].v;
if( edge[ i ].val> && lev[ nxt ]==- ){
lev[ nxt ] = lev[ cur ] + ;
q[ tail2++ ] = nxt;
}
}
}
if( lev[ dest ]==- ) return false;
else return true;
} int Dinic( int src,int dest,int n ){
int maxFlow = ;
while( true ){
if( bfs( src,dest,n )==false )
break;
//printf("ok\n");
int id = src;
int tail = ;
while( true ){
if( id==dest ){
int flow = inf;
int flag = -;
for( int i=;i<tail;i++ ){
if( edge[ q[ i ] ].val<flow ){
flow = edge[ q[ i ] ].val ;
flag = i;
}
}
for( int i=;i<tail;i++ ){
edge[ q[ i ] ].val -= flow;
edge[ q[ i ]^ ].val += flow;
}
if( flag==- ) {
// printf("Un_Normal\n");
return inf;
}
else{
maxFlow += flow;
tail = flag;
id = edge[ q[ flag ] ].u;
}
}
//solve maxFlow
id = head[ id ];
while( id!=- ){
if( edge[ id ].val> && lev[ edge[id].u ]+==lev[ edge[id].v ] ){
break;
}
id = edge[ id ].next;
}
if( id!=- ){
q[ tail++ ] = id;
id = edge[ id ].v;
}
else{
if( tail== ) break;
lev[ edge[ q[ tail- ] ].v ] = -;
id = edge[ q[ --tail ] ].u;
}
}
}
//printf("Normal:\n");
return maxFlow;
} int main(){
//freopen( "in.txt","r",stdin );
int n;
//printf("ok\n");
while( scanf("%d",&n)== ){
init();
int cc;
int u,v;
//printf("begin input\n");
for( int i=;i<n;i++ ){
scanf("%d",&cc);
//printf("cc = %d\n",cc);
u = i;
while( cc-- ){
scanf("%d",&v);
if( u==||v==n ){
addedge( u,v, );
addedge( v,u, );
}
else{
addedge( u,v,inf );
addedge( v,u, );
}
}
}
int src = ;
int dest = n;
//printf("begin\n");
printf("%d\n",Dinic( src,dest,n ));
}
return ;
}
ECNU1101-Dinic的更多相关文章
- ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
//有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...
- ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)
最小割的好题,可用作模板. //Dinic+枚举字典序最小的最小割点集 //Time:1032Ms Memory:1492K #include<iostream> #include< ...
- 网络流dinic实现总结
太羞耻了,搞了半天居然没发现自己写的不是dinic,直到被一道时限紧的题目卡掉才发现 int dfs(int now,int flow,int sum) { if(now==n) return flo ...
- ACM/ICPC 之 Dinic算法(POJ2112)
Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- HDU 3572 Task Schedule(拆点+最大流dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- ISAP算法对 Dinic算法的改进
ISAP算法对 Dinic算法的改进: 在刘汝佳图论的开头引言里面,就指出了,算法的本身细节优化,是比较复杂的,这些高质量的图论算法是无数优秀算法设计师的智慧结晶. 如果一时半会理解不清楚,也是正常的 ...
- hdu4292Food(最大流Dinic算法)
/* 题意:每一个人都有喜欢的吃的和喝的,每一个人只选择一个数量的吃的和一个数量的喝的,问能满足最多的人数!? 思路:建图很是重要!f-food, p-people, d-drink 建图: 0(源点 ...
- DINIC网络流+当前弧优化
DINIC网络流+当前弧优化 const inf=; type rec=record s,e,w,next:longint; end; var b,bb,d,q,tb:..] of longint; ...
- dinic模板
procedure addedge(u,v,cap:longint); begin sid[tot].u:=u; sid[tot].v:=v; sid[tot].cap:=cap; sid[tot]. ...
随机推荐
- iOS夯实:内存管理
iOS夯实:内存管理 文章转自 内存管理 最近的学习计划是将iOS的机制原理好好重新打磨学习一下,总结和加入自己的思考. 有不正确的地方,多多指正. 目录: 基本信息 旧时代的细节 新时代 基本信息 ...
- 暑假集训(5)第一弹——— Super Jumping! Jumping! Jumping!(hdu1087)
题意概括:在上次与娑殚的三次博弈中,你们都取得了胜利.便向娑殚提出要求,借助他的力量,传送到一个安全的地方. 你们的愿望达成了,不过,你和小A似乎失散了. 街上人来人往的特别热闹,每一个人的脸上都洋溢 ...
- Windows VC++常见问题汇总
1.warning C4996: 'setmode': The POSIX name for this item is deprecated. Instead, use the ISO C++ con ...
- Windows Phone 8.1 列表控件(1):基本
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- linux ubuntu ppa源
ubuntu10.04添加删除PPA源 增加ppa资源以后,今后的版本更新什么的都会从launchpad去下载,在国内访问launchpad速度比乌龟还慢 Ubuntu里,PPA代表一种非稳定版本 ...
- Hadoop fs命令详解
本文非原创,转载自http://www.superwu.cn/2013/07/31/312 另外参考:http://www.blogjava.net/changedi/archive/2013/08/ ...
- Nhibernate的log4net和系统的log4net使用技巧
NHibernate定义了两个logger:NHibernate和NHibernate.SQL.我们可以分别配置这两个logger.在App.config文件中<root>标签前边添加如下 ...
- 設定 Bootstrap/SASS/Bower/gulp (Windows平台)
請注意:在進行以下步驟前,你會需要先安裝git,可以參考這篇 git安裝教學 前言 時至今日,幾乎每個人都在討論bootstrap.less 或 sass.我們知道它們是比較新的前端技術,而且有開始愈 ...
- OCP考试之052
Oracle Database 11g:Administration I 考试时间:90分钟 考试题目:70题 考试语言:英语 考试分数:66% 考试内容: 了解Oracle数据库体系结构 解释的内存 ...
- AWS--EC2基本概念
原文:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html EC2:Elastic Compute Cloud 特性包括: ...