第一次网络流,学了一天的DINIC算法(个人比较愚),切了这个入门题,开始的时候怎么调连

测试都过不了,后来发现犯了一个低级错误!把判断条件放在for(;)!里面和放在for下面大大

不同啊!里面的话,一遇到不符合立即结束了(相当于break)!而下面的可以continue!

dinic算法,每次BFS根据残量网络作层次图,每做一次后DFS找一个增广路(我是到目标点就return,

每次记录该增广路中的最窄边,回溯时按最窄边更新图即可)。

#include<iostream>  //16ms 1A
#include<vector>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int inf=0x3f3f3f3f;
int m,n;
struct edge
{
int to,f,pre;
};
int mark=0;int minf=inf; //一条增广路最窄的边
int head[201];vector<edge>edges(403);
int vis[201];int level[201];
bool bfs() //层次图,根据残量网络记录与原点的距离(层次)
{
for(int i=1;i<=n;i++)
{
vis[i]=level[i]=0;
}
vis[1]=1;
queue<int>q;q.push(1);
while(!q.empty())
{
int cur=q.front();
q.pop();
for(int i=head[cur];i!=-1;i=edges[i].pre)
{
if(edges[i].f>0&&!vis[edges[i].to]) //放里面
{
vis[edges[i].to]=1;
q.push(edges[i].to);
level[edges[i].to]=level[cur]+1;
}
}
}
return vis[n]; //访问不到目标地,结束(找不到增广路)
}
void dfs(int cur) //每次找一条增广路
{
if(cur==n||mark){mark=1;return;}
for(int i=head[cur];i!=-1&&!mark&&minf;i=edges[i].pre)
{
int v=edges[i].to;
int temp=edges[i].f;
if(level[v]==level[cur]+1&&temp)
{
int tmin=minf;
if(minf>temp)minf=temp;
dfs(v);
if(mark)
{
edges[i].f-=minf;
edges[i^1].f+=minf;
}
else //非目的地的回溯,minf作为全局变量,要改回来。
minf=tmin;
}
}
return ;
}
int main()
{
while(~scanf("%d%d",&m,&n))
{
int s,l,c;
memset(head,-1,sizeof(head));
for(int i=0;i<2*m;i++)
{
scanf("%d%d%d",&s,&l,&c);
edges[i].to=l;
edges[i].pre=head[s];
head[s]=i;edges[i].f=c;
i++;
edges[i].to=s;
edges[i].pre=head[l];
head[l]=i;edges[i].f=0;
}
long long maxflow=0;
while(bfs())
{
mark=0;minf=inf;
dfs(1);
maxflow+=minf;
}
printf("%lld\n",maxflow);
}
}

最新文章

  1. 小白学习MVC5+EF6遇到的问题一
  2. Java — JTree and JTable以及sqlServer的两种连接
  3. Linux使用汇总贴
  4. Flash与IE奇怪的关键字冲突
  5. firefox 扩展开发笔记(三):高级ui交互编程
  6. Hadoop组成
  7. MongoDB通过Shell 实现集合的日常归档
  8. 【Sqoop篇】----Sqoop从搭建到应用案例
  9. SparkStreaming+Kafa+HBase
  10. Express全系列教程之(一):Express的安装 和第一个程序
  11. C#-非泛型集合的方法
  12. Linux rsync同步
  13. hdu 1542 线段树+扫描线 学习
  14. 数据转换bug花了半天时间 Java.math.BigDecimal cannot be cast to java.lang.String
  15. jzoj1407
  16. CentOS6.4 下安装 Apache2.4.16
  17. huawei oceanstor
  18. super() 的入门使用
  19. 为什么原生的servlet是线程不安全的而Struts2是线程安全的?
  20. mindmanager思维导图软件

热门文章

  1. 来,一起梳理下Android响应点击事件的方法
  2. 【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现
  3. CentOS 7下安装配置proftpd搭建ftp服务器
  4. Spring框架 aop操作的注解方法 基于aspectj的自动注解aop方法 抽取相同的value=&quot;execution(public void cn.itcast.f_aspect.CRUD.*())&quot;
  5. 「 HDOJ P3887 」 Counting Offspring
  6. POJ 3659 Cell phone Network (树的最小点覆盖, 树形DP)
  7. C#中对泛型List进行分组输出元素
  8. 解决hibernate产生的id序列或者setXX不能同步到数据库到问题(this.hibernateTemplate.flush();hibernateTemplate.getSessionFactory().getCurrentSession().connection().commit())
  9. python练习——小程序
  10. 大数据学习——mapreduce共同好友