poj1273最大流初破
第一次网络流,学了一天的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);
}
}
poj1273最大流初破的更多相关文章
- POJ1273 最大流模板
之前自己写的,以后当一个模板的基础吧,不管是最大流,最小割,二分图匹配 下面是POJ1273的一个裸题.. 1 #include <iostream> 2 #include <cst ...
- POJ1273 最大流 EK算法
套了个EK的模板 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdi ...
- POJ1273(最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70451 Accepted: 2739 ...
- POJ1273(最大流入门)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70333 Accepted: 2733 ...
- hdu1532&&poj1273 最大流
Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1. (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4 ...
- iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流
最近项目中想实现直播的功能,所以研究了一段时间的直播功能,当然也是在别人的基础上不断的学习实现的,所以记录一下,希望对大家有所帮助. 直播拉流功能: 这里使用了开源的IJKPlayer第三框架,ijk ...
- 什么是可变参数?如何创建不可变集合?Steam三类方法是什么?获取流方法特点?流中间方法特点?终结流方法特点?
==知识梳理== ==重难点梳理== ==今日目标== 1.能够了解什么是可变参数 2.能够了解如何去创建不可变集合 3.能够掌握Stream流的使用 ==知识点== 1.可变参数 2.Stream流 ...
- poj2月下旬题解
poj2388 水题 poj1273 最大流初步 poj2456 简单的二分答案 poj2309 论lowbit的重要性 poj1734 floyd求最小环 poj1001 细节题 poj2184 0 ...
- hdu3622 2-sat问题,二分+判断有无解即可。
/*2-sat问题初破!题意:每一对炸弹只能选一个(明显2-sat),每个炸弹半径自定,爆炸范围不可 相交,求那个最小半径的最大值(每种策略的最小半径不同).思:最优解:必然是选择的点最近 的俩个距离 ...
随机推荐
- 【HEVC帧间预测论文】P1.9 Coding Tree Depth Estimation for Complexity Reduction of HEVC
Coding Tree Depth Estimation for Complexity Reduction of HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见: ...
- 浅析 innerHTML 性能优化的原理
浅析 innerHTML 性能优化的原理 博客分类: web前端 IEAndroidwebkit浏览器UI 昨天看了 lveyo老兄的"innerHTML的性能问题" 一文 ht ...
- virtualbox没有64位选项
今天安装的virtualbox想安装一下sql server 测试一下 在安装系统的时候发现没有64位系统的选项,在网上找了一下 发现是 在BIOS里面有一个选项没有开启, 是 Intel virt ...
- 恩智浦iMX6Q核心板/飞思卡尔Cortex-A9高稳定性低功耗开发板
iMX6Q核心板-商业级 iMX6Q-Plus核心板 iMX6DL核心板-商业级 iMX6Q核心板-工业级 iMX6核心板区别: 名称 主频 内存 存储 SATA接口 运行温度 引角扩展 iMX6Q核 ...
- ArrayList Vector LinkedList分析
1.创建 ArrayList 的底层是一个数组. ArrayList<String> list1 = new ArrayList<>(); list1.add("a ...
- _ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
_ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
- C# 关于datetime的用法(网上考的)
实例: 用户输入一个日期,要求输出这个日期是星期几和在这一年中的第几天: 复制代码代码如下: //声明一个DateTime类型的变量用于存放用户输入的日期DateTime dt;Console.Wri ...
- 【模板】插头dp
题目描述 题解: 插头$dp$中经典的回路问题. 首先了解一下插头. 一个格子,上下左右四条边对应四个插头.就像这样: 四个插头. 一个完整的哈密顿回路,经过的格子一定用且仅用了两个插头. 所以所有被 ...
- Informatica抽取SQL Server数据库乱码
1.首先确认数据库的关系连接所使用的代码页,是否一致 2.如果上述方法不行,在Designer中更改数据类型,将string类型改为nstring类型,中文就没有乱码了 3.SQL Server数据库 ...
- 什么是PHP中的heredoc和nowdoc
heredoc结构类似于双引号字符串,nowdoc结构是类似于单引号字符串的.nowdoc结构很像heredoc结构,但是 nowdoc不进行解析操作. 这种结构很适合用在不需要进行转义的PHP代码和 ...