3931: [CQOI2015]网络吞吐量 最短路+最大流
来源:互联网 发布:淘宝双十一成交量 编辑:程序博客网 时间:2024/05/16 09:23
。。题意说的很清楚了,先求最短路径图再拆点网络流。
居然没被long long坑,1A赞。
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#define inf 1e18#define ll long long #define pa pair<ll,int>using namespace std;int n,m,cnt,T;int v[100005],u[100005],w[100005];int next[500005],list[500005];int head[1005], cur[1005],q[1005];ll dis[1005],key[500005];bool vis[1005];priority_queue<pa,vector<pa>,greater<pa> > heap;inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}inline void insert(int x,int y,ll z){ next[++cnt]=head[x]; head[x]=cnt; list[cnt]=y; key[cnt]=z;}inline void dijkstra(){ for (int i=1;i<=n;i++) dis[i]=inf; dis[1]=0; heap.push(make_pair(0,1)); while (!heap.empty()) { int x=heap.top().second; heap.pop(); if (vis[x]) continue; vis[x]=1; for (int i=head[x];i;i=next[i]) if (dis[list[i]]>dis[x]+key[i]) { dis[list[i]]=dis[x]+key[i]; heap.push(make_pair(dis[list[i]],list[i])); } }}inline bool BFS(){ for (int i=1;i<=T;i++) dis[i]=-1; dis[1]=1; q[1]=1; int t=0,w=1,x; while (t<w) { x=q[++t]; for (int i=head[x];i;i=next[i]) if (key[i]&&dis[list[i]]==-1) dis[list[i]]=dis[x]+1,q[++w]=list[i]; } return dis[T]!=-1;}ll find(int x,ll flow){ if (x==T) return flow; ll w,used=0; for (int i=cur[x];i;i=next[i]) if (key[i]&&dis[list[i]]==dis[x]+1) { w=find(list[i],min(key[i],flow-used)); key[i]-=w; key[i^1]+=w; used+=w; if (used==flow) return used; } if (!used) dis[x]=-1; return used;}inline ll dinic(){ ll tmp=0; while (BFS()) { for (int i=1;i<=T;i++) cur[i]=head[i]; tmp+=find(1,inf); } return tmp;}int main(){ n=read(); m=read(); for (int i=1;i<=m;i++) { u[i]=read(),v[i]=read(),w[i]=read(); insert(u[i],v[i],w[i]); insert(v[i],u[i],w[i]); } dijkstra(); cnt=1; T=2*n; memset(head,0,sizeof(head)); for (int i=1;i<=m;i++) { if (dis[u[i]]+w[i]==dis[v[i]]) insert(u[i]+n,v[i],inf),insert(v[i],u[i]+n,0); if (dis[v[i]]+w[i]==dis[u[i]]) insert(v[i]+n,u[i],inf),insert(u[i],v[i]+n,0); } for (int i=1;i<=n;i++) { int c=read(); if (i==1||i==n) insert(i,i+n,inf),insert(i+n,i,0); else insert(i,i+n,c),insert(i+n,i,0); } cout << dinic() << endl; return 0;}
0 0
- 3931: [CQOI2015]网络吞吐量 最短路+最大流
- BZOJ 3931 [CQOI2015]网络吞吐量 最短路+最大流
- BZOJ 3931 [CQOI2015]网络吞吐量 最短路+最大流
- [BZOJ3931]CQOI2015网络吞吐量|最短路|最大流
- bzoj 3931: [CQOI2015]网络吞吐量(最短路+网络流)
- BZOJ 3931: [CQOI2015]网络吞吐量【最短路+网络流
- 【BZOJ3931】【CQOI2015】网络吞吐量 最短路+网络流
- 【BZOJ3931】【CQOI2015】网络吞吐量(最短路,网络流)
- BZOJ 3931 CQOI 2015 网络吞吐量 最短路+最大流
- BZOJ 3931 网络吞吐量 (最短路+最大流)
- BZOJ 3931 CQOI 2015 网络吞吐量 最大流 最短路
- 【BZOJ 3931】[CQOI2015]网络吞吐量 dijkstra+最大流
- BZOJ 3931: [CQOI2015]网络吞吐量 dijstra+heap+最大流
- 【bzoj3931】【CQOI2015】【网络吞吐量】【spfa+最大流】
- [bzoj3931][CQOI2015]网络吞吐量 spfa+最大流
- 3931: [CQOI2015]网络吞吐量
- 3931: [CQOI2015]网络吞吐量
- 3931: [CQOI2015]网络吞吐量
- c++模板(一)
- Django+xadmin 显示问题,无法添加inline
- LeetCode49. Group Anagrams
- mybatis 插入时返回刚插入记录的主键值
- linux利用管道和Python删除目录下某个特定名字文件夹
- 3931: [CQOI2015]网络吞吐量 最短路+最大流
- Java Number类
- 第11讲 ADS工具使用 建立硬件调试环境
- mybaits+bootstrap的模糊查询实现
- 数学常用公式及规律、结论(三)
- 蓝桥杯 李白打酒 (dfs)
- 使用Qark寻找与 Android 应用相关的安全漏洞
- MySQL数据库优化
- java 实现数据结构之线性表