【bzoj1266】[AHOI2006]上学路线route 最小割+floyd
来源:互联网 发布:ug8.5 for mac 编辑:程序博客网 时间:2024/05/01 13:28
不难。
最小割
点1到点n的所有最短路全都不连通
先floyd建出最短路图
最短路图
如果边(i,j),满足f[1][i]+t+f[j][n]=f[1][n],则其在最短路图上
对于最短路图上的每一条边,对应连一条容量为c的边
建边写错了!!!幸好及时发现,不然还又是一上午。
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>#define maxn 510#define maxm 500010#define inf 1000000000using namespace std;struct yts{int x,y,f,c;}e[200010];int head[maxn],to[maxm],c[maxm],next[maxm],q[maxn],d[maxn];int f[maxn][maxn];int num,n,m,s,t,ans;void addedge(int x,int y,int z){num++;to[num]=y;c[num]=z;next[num]=head[x];head[x]=num;num++;to[num]=x;c[num]=0;next[num]=head[y];head[y]=num;}bool bfs(){memset(d,-1,sizeof(d));int l=0,r=1;q[1]=s;d[s]=0;while (l<r){int x=q[++l];for (int p=head[x];p;p=next[p]) if (c[p] && d[to[p]]==-1) { d[to[p]]=d[x]+1; q[++r]=to[p]; }}if (d[t]==-1) return 0; else return 1;}int find(int x,int low){if (x==t || low==0) return low;int totflow=0;for (int p=head[x];p;p=next[p]) if (c[p] && d[to[p]]==d[x]+1) { int a=find(to[p],min(low,c[p])); c[p]-=a;c[p^1]+=a; low-=a;totflow+=a; if (low==0) return totflow; }if (low) d[x]=-1;return totflow;}void Dinic(){while (bfs()) ans+=find(s,inf);}int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) f[i][j]=inf;for (int i=1;i<=n;i++) f[i][i]=0;for (int i=1;i<=m;i++){int x,y,z,w;scanf("%d%d%d%d",&x,&y,&z,&w);f[x][y]=f[y][x]=min(f[x][y],z);e[i].x=x;e[i].y=y;e[i].f=z;e[i].c=w;}for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]);printf("%d\n",f[1][n]);num=1;s=1;t=n;for (int i=1;i<=m;i++){int x=e[i].x,y=e[i].y,z=e[i].f,c=e[i].c; if (f[1][x]+z+f[y][n]==f[1][n]) addedge(x,y,c); if (f[1][y]+z+f[x][n]==f[1][n]) addedge(y,x,c);}Dinic();printf("%d\n",ans);return 0;}
0 0
- 【bzoj1266】[AHOI2006]上学路线route 最小割+floyd
- 【BZOJ1266】【AHOI2006】上学路线route 最短路建图转最小割
- 【BZOJ1266】[AHOI2006]上学路线route【最短路图】【最小割】
- [BZOJ1266][AHOI2006]上学路线route(spfa+最小割)
- [BZOJ1266]-[AHOI2006]上学路线route-SPFA+最小割
- BZOJ 1266 AHOI2006 上学路线route Floyd+最小割
- bzoj1266【AHOI2006】上学路线route
- bzoj1266: [AHOI2006]上学路线route
- BZOJ1266: [AHOI2006]上学路线route
- BZOJ1266 上学路线route(最小割)
- [AHOI2006] BZOJ1266 上学路线route-图论-最短路树-最小割
- [BZOJ1266][AHOI2006][最短路][最小割]上学路线
- 【bzoj1266】【AHOI2006】【上学路线】【最短路+最小割】
- [bzoj1266][AHOI2006] 上学路线 最小割+最短路
- BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割
- Bzoj1266 Ahoi2006 上学路线
- [BZOJ]1266: [AHOI2006]上学路线route spfa+最小割
- 1266: [AHOI2006]上学路线route
- poj 2488 A Knight's Journey DFS
- Android RxJava 新技术详解
- C++读写EXCEL文件方式比较
- 常用代码备份--MFC按钮选择文件/文件夹
- 项目部署,版本迭代个人心得
- 【bzoj1266】[AHOI2006]上学路线route 最小割+floyd
- ssh卡在debug1: SSH2_MSG_KEXINIT sent解决方法
- 微信为啥这么省流量(技术宅入)
- Elasticsearch实战系列-环境搭建
- Java中使用Jar包时读取当前jar文件所在的目录工具
- “树”不倒,人不散—数据结构的核心
- 内核源码树的构建1
- Eclipae常用快捷键 Java代码
- VC2010环境OLE导出Excel的方法及步骤