HDU 5294 Tricks Device(最短路最小割)
来源:互联网 发布:python量化交易教程pdf 编辑:程序博客网 时间:2024/05/07 06:12
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/20.// Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn=3000+10;int vis[maxn],dist[maxn],minb[maxn],head[maxn],Layer[maxn];int n,m;int tot;struct edge{ int v,w,next;}edge[maxn*60];struct node{ int v,flow,rev; node(int v,int flow,int rev):v(v),flow(flow),rev(rev) {}};vector<node> G[maxn];void add_edge(int u,int v,int w){ edge[tot].v=v; edge[tot].w=w; edge[tot].next=head[u]; head[u]=tot++; edge[tot].v=u; edge[tot].w=w; edge[tot].next=head[v]; head[v]=tot++;}void spfa(int s){ memset(dist,0x7f,sizeof(dist)); memset(minb,0x7f,sizeof(minb)); memset(vis,0,sizeof(vis)); queue<int> q; dist[s]=0; minb[s]=0; vis[s]=1; q.push(s); while(!q.empty()) { int u=q.front();q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; int w=edge[i].w; if(dist[v]==dist[u]+w){ minb[v]=min(minb[v],minb[u]+1); if(!vis[v]){ vis[v]=1; q.push(v); } } if(dist[v]>dist[u]+w){ dist[v]=dist[u]+w; minb[v]=minb[u]+1; if(!vis[v]){ vis[v]=1; q.push(v); } } } }}int abs(int x){return x>0?x:-x;}void add(int u,int v,int flow){ G[u].push_back(node(v,flow,(int)G[v].size())); G[v].push_back(node(u,0,(int)G[u].size()-1));}void Build_Graph(){ for(int i=1;i<=n;i++) { for(int j=head[i];j!=-1;j=edge[j].next) { int v=edge[j].v,w=edge[j].w; if(dist[v]-dist[i]==w){ add(i,v,1); } } }}int dfs(int v,int t,int f){ if(v==t) return f; vis[v]=1; for(int i=0;i<G[v].size();i++) { node &e=G[v][i]; if(!vis[e.v]&&e.flow>0){ int d=dfs(e.v,t,min(f,e.flow)); if(d>0){ e.flow-=d; G[e.v][e.rev].flow+=d; return d; } } } return 0;}int Dinic(){ int ans=0; while(1) { memset(vis,0,sizeof(vis)); int f=dfs(1,n,99999999); if(f==0) break; else ans+=f; } return ans;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { tot=0; memset(head,-1,sizeof(head)); for(int i=0;i<=n;i++) G[i].clear(); int u,v,w; for(int i=0;i<m;i++){ scanf("%d%d%d",&u,&v,&w); add_edge(u,v,w); } spfa(1); Build_Graph(); printf("%d %d\n",Dinic(),m-minb[n]); } return 0;}
0 0
- hdu HDU 5294 - Tricks Device(最短路+最小割)
- HDU 5294 - Tricks Device(最短路+最小割)
- hdu 5294 Tricks Device 最短路建图+最小割
- HDU 5294 Tricks Device(最短路+最小割)
- HDU 5294 Tricks Device 最短路+最小割
- HDU 5294(Tricks Device-最短路最小割)[Template:SPFA]
- HDU 5294 Tricks Device(最短路最小割)
- HDU 5294 Tricks Device 最短路最小割 -
- hdu5294 Tricks Device 最短路+最小割
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
- hdoj 5294 Tricks Device 【最短路+ 最小割】
- 【hdoj 5294】 Tricks Device 【最小割+最短路spfa】
- HDU 5294 Tricks Device(2015多校第一场 最短路 + 最小割)
- HDU 5294 Tricks Device (最短路上的最小割) 2015多校训练1007
- HDU 5294--Tricks Device【最小割 && 最短路处理,新建图】
- hdu 5294 Tricks Device(最短路+网络流(最小割))
- HDU 5294 Tricks Device (2015 MUT#1 最短路建图+最小割)
- HDU 5294 Tricks Device 最短路建图+最小割(最大流)
- VMware虚拟机安装CentOS 6.8 (图解)
- 应用系统之间数据传递的几种方式
- POJ_1182_食物链
- Java线程相关的常用方法
- 为何我看好电商直播
- HDU 5294 Tricks Device(最短路最小割)
- 整体框架
- 第四周--建立单链表
- bzoj 1053: [HAOI2007]反素数ant (数论)
- 回顾JavaSE(3)-String(2)三行代码看String的内存分配
- 关于如何格式化安装了windows10 IOT系统的SD卡
- 异步任务用法
- 出栈序列判定
- 【Python开发】【神经网络与深度学习】网络爬虫之python实现