POJ 1273 Drainage Ditches【图论,网络流】
就是普通的网络流问题,想试试新学的dinic算法,这个算法暑假就开始看国家集训队论文了,之前一直都只用没效率的EK算法,真正学会这个算法还是开学后白书上的描述:dinic算法就是不断用BFS构建层次图然后用DFS寻找增广。然后就是一下午的WA ,除了第一次调dinic的问题外,这道题竟然有多组数据!!!看discuss里好像还有重边的问题,可我用的邻接表有效避免了这个问题~~
#include <iostream>
#include <cstdio>
#include<string.h>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=600;
inth=0,dist[maxn]={0},nex[maxn*4+20]={0},root[maxn]={0},point[maxn*4+20]={0},flow[maxn*4+20]={0};
int visit[maxn]={0},m;
int min(int a,int b)
{
int ret=a<b ? a : b;
return ret;
}
void add(int x,int y,int c)
{
nex[++h]=root[x];
point[h]=y;
flow[h]=c;
root[x]=h;
}
void bfs(int src)
{
memset(visit,0,sizeof(visit));
memset(dist,0,sizeof(dist));
int l=0,r=1,que[50000]={0};
que[++l]=src;
visit[src]=1;
while(l<=r)
{
int u=que[l++];
for(int i=root[u];i!=0;i=nex[i])
{
if (flow[i]!=0 && visit[point[i]]==0)
{
que[++r]=point[i];
dist[point[i]]=dist[u]+1;
visit[point[i]]=1;
}
}
}
}
int dfs(int u,int d)
{
if(u==m)return d;
int ret=0;
for(int i=root[u];i!=0 && d;i=nex[i])
{
if (flow[i]!=0 && dist[point[i]]==dist[u]+1)
{
int dd=dfs(point[i],min(d,flow[i]));
flow[i]-=dd;
flow[((i-1) ^ 1)+1]+=dd;//这个构造最赞~~!!
d-=dd;
ret+=dd;
}
}
return ret;
}
int main()
{
int x,y,c,ret;
int n;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(root,0,sizeof(root));
memset(nex,0,sizeof(nex));
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&c);
add(x,y,c);
add(y,x,0);
}
ret=0;
while (1)//dinic
{
bfs(1);
if (visit[m]==0)break;
ret+=dfs(1,inf);
}
printf("%d\n",ret);
}
return 0;
}
POJ 1273 Drainage Ditches【图论,网络流】的更多相关文章
- POJ 1273 Drainage Ditches(网络流,最大流)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- poj 1273 Drainage Ditches(最大流)
http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- POJ 1273 Drainage Ditches (网络最大流)
http://poj.org/problem? id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- 网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches
Drainage Ditches 题目抽象:给你m条边u,v,c. n个定点,源点1,汇点n.求最大流. 最好的入门题,各种算法都可以拿来练习 (1): 一般增广路算法 ford() #in ...
- POJ 1273 Drainage Ditches 网络流 FF
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 74480 Accepted: 2895 ...
- poj 1273 Drainage Ditches 网络流最大流基础
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 59176 Accepted: 2272 ...
- 网络流--最大流--POJ 1273 Drainage Ditches
链接 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clov ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
随机推荐
- iOS之tableView性能优化/tableView滑动卡顿?
本文围绕以下几点展开tableView性能优化的论述? 1.UITableViewCell重用机制? 2.tableView滑动为什么会卡顿? 3.优化方法? 4.总结 1.UITableViewCe ...
- JDK使用最多的模式之一--观察者模式
公司接到新任务,需要做一个气象监测应用.该应用将实现三个界面:当前气象状态,气象统计以及气象预报.应用从WeatherObject对象中获取所需数据:温度,湿度,气压.当然,为了可扩展性,该应用同时也 ...
- rmdir
rmdir——删除空目录 remove empty directories 命令所在路径:bin/rmdir 示例: # rmdir /tmp/japan/longze 删除/tmp/japan/目录 ...
- SAP CRM点了附件的超链接后报错的处理方式
SAP CRM系统里,点击了附件的这些超链接后,如果是文本文件,会在浏览器里打开.如果是其他类型的文件,会弹出下载对话框. 然而最近我工作时遇到一个问题,点击超链接后,总是弹出Logon failed ...
- swift Equatable 函数签名的测试
struct Degoo:Equatable { var lex:String var pex:String static func == (left:Degoo, right:Degoo) -> ...
- [Redis] 基于redis的分布式锁
前言分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁. 可靠性首先,为了确保 ...
- css实现水平/垂直居中效果
一.如果是已知宽高的元素做水平/垂直居中效果的话,可以直接用具体的数值指定定位布局或偏移布局,这个就不过多讨论.这里主要介绍在不知宽高或需要弹性布局下的几种实现方式. 二.1.table表格法思路:显 ...
- 理解 Word2Vec 之 Skip-Gram 模型
理解 Word2Vec 之 Skip-Gram 模型 天雨粟 模型师傅 / 果粉 https://zhuanlan.zhihu.com/p/27234078 508 人赞同了该文章 注明:我发现知乎有 ...
- POJ-1200-Crazy Search(字符串Hash)
Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33142 Accepted: 9079 Descrip ...
- ARP 协议
1. 什么是ARP协议? 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化.对于IPv4来说,我们使用ARP地址解析 ...