首先,从1和n跑一次dij,判断每一条边能否出现在最短路上,不能出现就删掉,然后将所有边建在图上,流量为边权,跑最小割即可。

  1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10005
4 #define ll long long
5 struct ji{
6 int nex,to,len;
7 }edge[N<<1];
8 vector<ji>v;
9 queue<int>q;
10 int E,t,n,m,x,y,z,head[N],d[N],work[N];
11 ll d1[N],d2[N];
12 struct ji2{
13 int k;
14 bool operator < (const ji2 &a)const{
15 return d1[k]>d1[a.k];
16 }
17 };
18 priority_queue<ji2>qq;
19 void add(int x,int y,int z){
20 edge[E].nex=head[x];
21 edge[E].to=y;
22 edge[E].len=z;
23 head[x]=E++;
24 }
25 void dij(int k){
26 memset(d1,0x3f,sizeof(d1));
27 qq.push(ji2{k});
28 d1[k]=0;
29 while (!qq.empty()){
30 k=qq.top().k;
31 qq.pop();
32 for(int i=head[k];i!=-1;i=edge[i].nex){
33 if (d1[k]+edge[i].len<d1[edge[i].to]){
34 d1[edge[i].to]=d1[k]+edge[i].len;
35 qq.push(ji2{edge[i].to});
36 }
37 }
38 }
39 }
40 bool bfs(){
41 memset(d,-1,sizeof(d));
42 q.push(1);
43 d[1]=0;
44 while (!q.empty()){
45 int k=q.front();
46 q.pop();
47 for(int i=head[k];i!=-1;i=edge[i].nex){
48 int v=edge[i].to;
49 if ((edge[i].len)&&(d[v]<0)){
50 d[v]=d[k]+1;
51 q.push(v);
52 }
53 }
54 }
55 return d[n]>=0;
56 }
57 int dfs(int k,int s){
58 if (k==n)return s;
59 int p;
60 for(int i=work[k];i!=-1;i=edge[i].nex){
61 int v=edge[i].to;
62 if ((edge[i].len)&&(d[v]==d[k]+1)&&(p=dfs(v,min(s,edge[i].len)))){
63 edge[i].len-=p;
64 edge[i^1].len+=p;
65 work[k]=i;
66 return p;
67 }
68 }
69 work[k]=-1;
70 return 0;
71 }
72 ll dinic(){
73 int k;
74 ll ans=0;
75 while (bfs()){
76 memcpy(work,head,sizeof(head));
77 while (k=dfs(1,0x3f3f3f3f))ans+=k;
78 }
79 return ans;
80 }
81 int main(){
82 scanf("%d",&t);
83 while (t--){
84 scanf("%d%d",&n,&m);
85 if (n==1){
86 printf("0\n");
87 continue;
88 }
89 E=0;
90 memset(head,-1,sizeof(head));
91 v.clear();
92 for(int i=1;i<=m;i++){
93 scanf("%d%d%d",&x,&y,&z);
94 add(x,y,z);
95 v.push_back(ji{x,y,z});
96 }
97 dij(1);
98 memcpy(d2,d1,sizeof(d1));
99 E=0;
100 memset(head,-1,sizeof(head));
101 for(int i=0;i<v.size();i++)add(v[i].to,v[i].nex,v[i].len);
102 dij(n);
103 v.clear();
104 for(int i=1;i<=n;i++)
105 for(int j=head[i];j!=-1;j=edge[j].nex)
106 if (d1[i]+d2[edge[j].to]+edge[j].len==d1[1])v.push_back(ji{edge[j].to,i,edge[j].len});
107 E=0;
108 memset(head,-1,sizeof(head));
109 for(int i=0;i<v.size();i++){
110 add(v[i].nex,v[i].to,v[i].len);
111 add(v[i].to,v[i].nex,0);
112 }
113 printf("%lld\n",dinic());
114 }
115 }

[hdu6582]Path的更多相关文章

  1. HDU6582 Path【优先队列优化最短路 + dinic最大流 == 最小割】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 来源:2019 Multi-University Training Contest 1 题目大意 ...

  2. [2019杭电多校第一场][hdu6582]Path(最短路&&最小割)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 题意:删掉边使得1到n的最短路改变,删掉边的代价为该边的边权.求最小代价. 比赛时一片浆糊,赛后 ...

  3. hdu多校第一场1005(hdu6582)Path 最短路/网络流

    题意: 在无向图上删边,让此图上从起点到终点的最短路长度变大,删边的代价是边长,求最小代价. 题解: 先跑一遍迪杰斯特拉,求出所有点的d[]值,然后在原图上保留所有的边(i,j)仅当i,j满足d[j] ...

  4. 【2019多校第一场补题 / HDU6582】2019多校第一场E题1005Path——最短路径+网络流

    HDU6582链接 题意 在一张有向图中,有一个起点和一个终点,你需要删去部分路径,使得起点到终点的最短距离增加(并不要求需要使得距离变成最大值),且删除的路径长度最短.求删去的路径总长为多少 分析 ...

  5. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  6. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  7. Node.js:path、url、querystring模块

    Path模块 该模块提供了对文件或目录路径处理的方法,使用require('path')引用. 1.获取文件路径最后部分basename 使用basename(path[,ext])方法来获取路径的最 ...

  8. VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...

  9. Leetcode 笔记 113 - Path Sum II

    题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...

随机推荐

  1. 重磅 | 阿里开源首个 Serverless 开发者平台 Serverless Devs

    Serverless 从概念提出到应用,已经走过了 8 个年头,开发者对 Serverless 的使用热情不断高涨.为帮助开发者实现一键体验多云产品,极速部署 Serverless 项目,10 月 2 ...

  2. 题解 最长道路tree

    题目传送门 题目大意 给出一个\(n\)个点的树,每个点有点权,定义一条链的贡献为该链的点数乘上链上的权值和,求出树上所有链中的权值最大值. \(n\le 5\times 10^4\) 思路 算是我入 ...

  3. 题解 SP6779 【GSS7 - Can you answer these queries VII】

    题目传送门 题目大意 给出一个\(n\)个点的树,每个点有权值.有\(m\)次操作,每次要么查询一条链上的最大子段和,要么把一条链的权值都修改为一个常数. \(n,m\le 10^5\) 思路 如果是 ...

  4. FastAPI 学习之路(二十七)安全校验

    你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...

  5. Java(42)JDK新特性之接口组成

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201666.html 博客主页:https://www.cnblogs.com/testero ...

  6. SQL Server 数据库单用户模式处理

    在还原数据库bak备份文件时,由于某种原因(具体何种原因在此不进行分析)导致数据库还原后处于单用户模式,如下图: 单个用户模式导致,数据库无法打开,只能通过脚本去查询数据库内的表,然后进行查询数据,极 ...

  7. docker内服务访问宿主机服务

    目录 1. 场景 2. 解决 4. 参考 1. 场景 使用windows, wsl2 进行日常开发测试工作. 但是wsl2经常会遇到网络问题.比如今天在测试一个项目,核心功能是将postgres 的数 ...

  8. Java:动态代理小记

    Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...

  9. CSP-S2021幽寂

    不管怎么说,这次比赛考的比这一段时间以来的模拟赛都难看 难受,但是也不想太表现出来,所以更难受.... 有点害怕会退役...... Day -6 前一天晚上回宿舍的时候和\(zxs\)一路,聊的过程中 ...

  10. 攻防世界 web5.disabled_button

    我觉得戴上手套按应该可以! 方法一: 打开网址,发现flag按钮无法点击,F12查看源代码,删除disabled=" ",flag就点击了. 方法二 POST请求, 先分析一下源代 ...