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]. ...
随机推荐
- Office升级到2013版后无法登录微软账号问题
自打office从2010版升级到2013版,就再也无法登录微软账号了.每次点击登录,弹出来的框就显示:this feature has been disabled by your administr ...
- 在win下面使用cdt+cygwin+cmake
在cygwin终端下面, cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug 当收获警告 Could ...
- php 中cookie和session的用法比较
1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session. ...
- asp.net 文件操作小例子(创建文件夹,读,写,删)
静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; strin ...
- JavaScript 函数的执行过程
每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫 ...
- JavaScript异步获取数据解析
<script type="text/javascript"> var xhr=false; function createXhr() { var x ...
- 对.Net WebSocket 和Socket的原理的思考
今早上班路上接到了一个朋友的微信信息,问我对WebSocket 是否熟悉,一楞,印象之中没有用过这个类....来到公司后,得空问了一下度娘,原来这是一个随着HTML5推出的一种新协议,意义在于能实现浏 ...
- app配置智能硬件的解决方案
随着越来越多的智能硬件产品上市,越来越多的硬件都戴上了智能的帽子,什么智能插座,智能音箱,智能称等等.凡是所谓的智能,都是通过wifi或者蓝牙来连接互联网,其中蓝牙也只能算是手机的附属品吧.主要还是硬 ...
- IE6/IE7中li底部4px的Bug
当li的子元素中有浮动(float)时,IE6/IE7中<li>元素的下面会产生4px空隙的bug. XHTML <ul class="list"> < ...
- 淘宝IP地址库采集器c#代码
这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下. 最近做一个项目,功能类似于CNZZ站长统计功能,要求显示Ip所在的省份市区/提供商等信息.网上的Ip纯真数据库,下载下来一看 ...