补题:跑两个最短路取出最短边跑最小割,全是模版,最短路初值附小了,找了好久的bug

#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#pragma comment (linker,"/STACK:102400000,102400000")
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define lowbit(x) x&(-x)
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define max4(a,b,c,d) max(max(a,b),max(c,d))
#define max3(x,y,z) max(max(x,y),max(y,z))
#define pii make_pair
#define pr pair<ll,ll>
typedef long long ll;
const int inff=0x3f3f3f3f;
const long long inFF=9223372036854775807;
const int dir[4][2]={0,1,0,-1,1,0,-1,0};
const double eps=1e-10;
const double E=2.718281828459;
const double pi=acos(-1.0);
typedef unsigned long long ull;
using namespace std;
const int maxn=1e4+100;
struct p
{ll first,second;bool friend operator<(p s,p e){return s.first>s.first;}
};
struct nod
{ll x,y,val;
}a[maxn];
struct node
{ll to,p;ll val;
}edge[maxn<<1],qedge[maxn<<1],qqedge[maxn<<1];
ll n,m;
ll d[maxn],d1[maxn],d2[maxn];
ll head[maxn],qhead[maxn],qqhead[maxn],qqsign,sign,qsign;
ll cur[maxn];
void add(ll u,ll v,ll val)
{edge[sign]=node{v,head[u],val};head[u]=sign++;qedge[qsign]=node{u,qhead[v],val};qhead[v]=qsign++;
}
void qqadd(ll u,ll v,ll val)
{qqedge[qqsign]=node{v,qqhead[u],val};qqhead[u]=qqsign++;qqedge[qqsign]=node{u,qqhead[v],0};qqhead[v]=qqsign++;
}
void init()
{sign=qsign=qqsign=0;for(ll i=0;i<=n+1;i++) head[i]=qhead[i]=qqhead[i]=-1;
}
ll dij1()
{for(ll i=1;i<=n;i++) d1[i]=inFF;d1[1]=0;priority_queue<p> q;q.push(p{0,1});while(!q.empty()){p now=q.top();q.pop();if(d1[now.second]<now.first) continue;for(ll i=head[now.second];~i;i=edge[i].p){ll v=edge[i].to;if(d1[v]>d1[now.second]+edge[i].val){d1[v]=edge[i].val+d1[now.second];q.push(p{d1[v],v});}}}return d1[n];
}
void dij2()
{for(ll i=0;i<=n;i++) d2[i]=inFF;d2[n]=0;priority_queue<p> q;q.push(p{0,n});while(!q.empty()){p now=q.top();q.pop();if(d2[now.second]<now.first) continue;for(ll i=qhead[now.second];~i;i=qedge[i].p){ll v=qedge[i].to;if(d2[v]>d2[now.second]+qedge[i].val){d2[v]=qedge[i].val+d2[now.second];q.push(p{d2[v],v});}}}
}
ll dfs(ll u,ll ed,ll low)
{if(u==ed) return low;ll temp=low,a;for(ll &i=cur[u];~i;i=qqedge[i].p){ll v=qqedge[i].to;if(d[v]==d[u]+1&&qqedge[i].val){if(a=dfs(v,ed,min(low,qqedge[i].val))){qqedge[i].val-=a;qqedge[i^1].val+=a;temp-=a;if(temp==0) break;}}}return low-temp;
}
bool bfs(ll st,ll ed)
{memset(d,0,sizeof(d));d[st]=1;queue<ll> q;q.push(st);while(!q.empty()){ll u=q.front();q.pop();for(ll i=qqhead[u];~i;i=qqedge[i].p){ll v=qqedge[i].to;if(!d[v]&&qqedge[i].val){d[v]=d[u]+1;q.push(v);}}}if(d[ed]>0) return true;return false;
}
ll dinic()
{ll ans=0;while(bfs(0,n)){for(ll i=0;i<=n;i++)cur[i]=qqhead[i];ans+=dfs(0,n,inff);}return ans;
}
int main()
{ll t;freopen("g://2.in","r",stdin);freopen("g://3.out","w",stdout);cin>>t;while(t--){cin>>n>>m;init();for(ll i=1;i<=m;i++){scanf("%lld %lld %lld",&a[i].x,&a[i].y,&a[i].val);add(a[i].x,a[i].y,a[i].val);}ll ans=dij1();dij2();n++;for(ll i=1;i<=m;i++){if(d1[a[i].x]+d2[a[i].y]+a[i].val==ans)qqadd(a[i].x,a[i].y,a[i].val);}qqadd(0,1,inff),qqadd(n-1,n,inff);ans=dinic();cout<<ans<<endl;}return 0;
}

Path HDU6582相关推荐

  1. python路径拼接os.path.join()函数的用法

    os.path.join()函数:连接两个或更多的路径名组件 1.如果各组件名首字母不包含'/',则函数会自动加上 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃 3.如果最后一个组 ...

  2. Android 自定义View —— Path

    Path 的概念: Path类封装由直线段,二次曲线和三次曲线组成的复合(多个轮廓)几何路径.可以使用canvas.drawPath(path,paint)对其进行填充或描边绘制(基于Paint的St ...

  3. Retrofit 网络请求参数注解@Path @Field @Query 等使用

    请求参数呢大致如下,到个别人的图, 下面就说下这些内容使用 其中 @Path.@Query.@QueryMap 使用 Get 请求 , 加入使用了Post 请求注解使用@Path  一般都会是项目崩溃 ...

  4. MSDN 教程短片 WPF 16(Path路径)

    制作动画路径-Path Path中有个Date属性,用来获取或设置指定要绘制的形状的 Geometry. 所以我们画一个圆来和一个椭圆路径,是圆在椭圆路径上移动,我们先画个圆. <Ellipse ...

  5. 对python3中pathlib库的Path类的使用详解

    原文连接   https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...

  6. Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)

    1. 概述说明 import "path" path 实现了对斜杠分隔的路径的实用操作函数. 2. 主要函数 2.1 func IsAbs func IsAbs(path stri ...

  7. [leetcode] Minimum Path Sum

    Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...

  8. java build path entries 为空_同事的代码简直没法看,我来教你如何更优雅的设计Java异常...

    点击上方蓝色字体,选择"设为星标" 回复"666"获取面试宝典 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的 ...

  9. Path Tracing

    Path Tracing 懒得翻译了,相信搞图形学的人都能看得懂,2333 Path Tracing is a rendering algorithm similar to ray tracing i ...

最新文章

  1. 电脑任务管理器_电脑任务管理器没有进程怎么办
  2. javascript 死循环
  3. Dataset:Big Mart Sales数据集的简介、下载、案例应用之详细攻略
  4. 1.25 包(package)详解
  5. Linux环境搭建 手把手教你配置Linux虚拟机
  6. 图解C语言的希尔排序
  7. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...
  8. PS制作棱镜化多边形照片效果
  9. Python-OpenCV基本操作
  10. linux下libnet编程 亲自测试可用
  11. Sequence of methods in form and table in AX
  12. html算命源码,index.html
  13. matlab求矩阵 均值、标准差、最大值以及reshape()函数
  14. 高斯过程回归GPR-MATLAB语法解释
  15. 计算机四级数据库分值分布,计算机四级数据库工程师考试成绩查询注意事项
  16. 基于ttcrpy的跨孔CT高斯牛顿算法及python代码分享(2)
  17. AutoCAD2007 打开缓慢解决方案
  18. 扫雷小游戏最详细讲解【C语言】
  19. 两个生物特征识别会议的最新情况
  20. CSM5213SG替代BD00GA3WEFJ-E2 测试参数对比

热门文章

  1. Android 串口通讯 获取卡号
  2. java中对Excel的创建、样式修改
  3. 负载均衡中使用 Redis 实现共享 Session
  4. 计算机名称改变之后,HOUDINI Server 连接不上的解决办法
  5. Bundle捆绑压缩技术
  6. python基础:python扩展包的安装方式
  7. 关于.NET玩爬虫这些事 【初码干货】
  8. 可以发张图片做链接用吗
  9. 怎么在vs2010中使用ActiveX Test Container(转)
  10. 32如何向Linux转,linux使用技巧32则