博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu3491最小割转最大流+拆点
阅读量:5837 次
发布时间:2019-06-18

本文共 1351 字,大约阅读时间需要 4 分钟。

题意:求最小割,即求最大流即可。此题之关键为拆点(限制在点),每条边都是双向边,注意一下。
未1A原因:在拆点之后添加边的过程中,要注意,出去的是i`,进来的是i,!!所以,写addegde函数时候

还是每次添加一单项边就好,之后手动调用,可以注意出入之边即可。简单题。

#include
//15ms#include
#include
using namespace std;int n,m,start,last; int nume;int e[80000][3];int head[300];const int inf=0x3f3f3f3f;void addedge(int from,int to,int w) //添加边的函数,derect为1时要添加双向边{ e[nume][0]=to; e[nume][1]=head[from];head[from]=nume; e[nume++][2]=w; e[nume][0]=from; e[nume][1]=head[to];head[to]=nume; e[nume++][2]=0;}int level[300];int vis[300];bool bfs() //dinic{ for(int i=0;i<=2*n+1;i++) vis[i]=level[i]=0; queue
q;q.push(start); vis[start]=1; while(!q.empty()) { int cur=q.front();q.pop(); for(int i=head[cur];i!=-1;i=e[i][1]) { int v=e[i][0]; if(!vis[v]&&e[i][2]>0) { level[v]=level[cur]+1; if(v==last+n)return 1; vis[v]=1; q.push(v); } } } return vis[last+n];}int dfs(int u,int minf){ if(u==last+n||minf==0)return minf; int sumf=0,f; for(int i=head[u];i!=-1&&minf;i=e[i][1]) { int v=e[i][0]; if(level[v]==level[u]+1&&e[i][2]>0) { f=dfs(v,minf

转载于:https://www.cnblogs.com/yezekun/p/3925804.html

你可能感兴趣的文章
程序员们都是不被世人所理解的真正天才吗?-请大家看这个数独的解法
查看>>
类方法熬之滴水穿石:JAVA的世界(4)
查看>>
ORACLE_RESETLOGS浅析
查看>>
基于Predictive Parsing的ABNF语法分析器(六)——AbnfParser文法解析器之多个符号连接的情形(如rule和CRLF)...
查看>>
spring事务管理
查看>>
英语音标
查看>>
Clock函数用法
查看>>
Jquery跨域获得Json
查看>>
密码配置配置SSH免密码登陆
查看>>
node.js 解析xml BOM问题(xmlreader sax.js)
查看>>
VCAP5-DCA Objective 1.3 – Configure and Manage Complex Multipathing and PSA Plug-ins
查看>>
笔记本装ubuntu发热量大该如何缓解?
查看>>
类的静态数据成员
查看>>
apk反编译
查看>>
豌豆荚不能连接三星S4手机,提示打开手机的“USB调试模式”,但却找不到在哪儿可以设置...
查看>>
linux 内核代码精简
查看>>
智能穿戴设备层出不穷,果壳智能手表为何先人一步?
查看>>
【AIX】AIX 6.1 “C compiler cc is not found”问题的解决方案
查看>>
Cocos-2d 坐标系及其坐标转换
查看>>
线段树初探
查看>>