【JZOJ3348】秘密任务【网络流】

最大费用循环流(帮助小罗拉,uva 1659) 用紫书上的第一种方法做的。 本来要找环使得分最大(即最大费用循环流),为了用最小费用流建模,就边权取反,然后找负环增广。(转换成最小费用循环流) 以下下有两个要点: 1、循环流没有最大流这个说法 事实上在算法运行时也只是找负圈,然后就对负圈进行增广,不存在源点与汇点,也不会对s-t进行增广,也就不会有所谓的最大流。 但其实算法运行完毕后是能够算出一个flow来的,这个flow叫啥我也不知 阅读详情

题目大意:

题目链接:https://jzoj.net/senior/#main/show/3348
在这里插入图片描述


思路:

这道题的提示还是很明显的,几乎一眼就可以看出是网络流。
首先,我们要知道从点1到点 n n n有哪些最短路,因为只有最短路才会对最终答案有贡献,换句话说,若你在一条非最短路上的边建立检查点其实是没有任何用处的。
所以我们从点1和点 n n n都跑一边最短路,然后枚举每一条边,这条边的左右端点设为 x , y x,y x,y。若满足 d i s [ 1 ] [ x ] + e [ i ] . d i s + d i s [ y ] [ n ] = d i s [ 1 ] [ n ] dis[1][x]+e[i].dis+dis[y][n]=dis[1][n] dis[1][x]+e[i].dis+dis[y][n]=dis[1][n],那么说明这条边一定是最短路上的边。于是就把这条边加入网络中。
我们发现,将一条边把守的代价其实就是在两端端点设立检查点的代价之一。所以我们把网络中的每一条边分割,在其中插入一个新的节点,这个节点左右两边的流量分别为两个端点设立检查点的代价。然后跑一边最大流,就是第二问的答案。
那么如何判断最优方案是否唯一呢?我们发现,如果所有的必割边的流量之和等于最大流,那么割掉这些边之后就没有其他边可以选择了。此时的割法就唯一。
如何判断网络中的某一条边是否为必割边呢?我们只要利用网络的残余流量来跑,看看每一条边所连接的两个点是否是分别属于源点集合和汇点集合的点即可。如果是,那么这条边就是必割边,因为如果不割这条边那么就依然可以有流量经过这条边,就不是“最小割”了。


代码:

#include <queue>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;

const ll N=1010,M=20010,Inf=1e9;
ll head[N],dis[3][N],dep[N],cur[N],X[M],Y[M],D[M],a[N];
ll n,m,Q,S,T,tot,num,sum,maxflow;
ll vis[N];

struct edge
{
    ll next,to,dis,flow,from;
}e[M];

ll read()
{
    ll d=0;
    char ch=getchar();
    while (!isdigit(ch)) ch=getchar();
    while (isdigit(ch))
        d=(d<<3)+(d<<1)+ch-48,ch=getchar();
    return d;
}

void add(ll from,ll to,ll dis,ll flow)
{
    e[++tot].to=to;
    e[tot].dis=dis;
    e[tot].from=from;
    e[tot].flow=flow;
    e[tot].next=head[from];
    head[from]=tot;
}

void spfa(ll S,ll id)
{
    memset(dis[id],0x3f3f3f3f,sizeof(dis[id]));
    memset(vis,0,sizeof(vis));
    queue<int> q;
    q.push(S);
    dis[id][S]=0;
    while (q.size())
    {
        ll u=q.front(),v;
        q.pop();
        vis[u]=0;
        for (ll i=head[u];~i;i=e[i].next)
        {
            v=e[i].to;
            if (dis[id][v]>dis[id][u]+e[i].dis)
            {
                dis[id][v]=dis[id][u]+e[i].dis;
                if (!vis[v])
                {
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
}

bool bfs()
{
    memcpy(cur,head,sizeof(cur));
    memset(dep,0x3f3f3f3f,sizeof(dep));
    queue<int> q;
    q.push(S);
    dep[S]=1;
    while (q.size())
    {
        ll u=q.front(),v;
        q.pop();
        for (ll i=head[u];~i;i=e[i].next)
        {
            v=e[i].to;
            if (dep[v]>dep[u]+1&&e[i].flow)
            {
                dep[v]=dep[u]+1;
                q.push(v);
            }
        }
    }
    return dep[T]<Inf;
}

ll dfs(ll x,ll flow)
{
    ll low=0;
    if (x==T)
    {
        maxflow+=flow;
        return flow;
    }
    ll used=0;
    for (ll i=cur[x];~i;i=e[i].next)
    {
        ll y=e[i].to;
        cur[x]=i;
        if (dep[y]==dep[x]+1&&e[i].flow)
        {
            low=dfs(y,min(e[i].flow,flow-used));
            if (low)
            {
                used+=low;
                e[i].flow-=low;
                e[i^1].flow+=low;
                if (used==flow) break;
            }
        }
    }
    return used;
}

void dinic()
{
    while (bfs())
        dfs(S,Inf);
}

void dfs1(ll x,ll id)
{
    vis[x]=id;
    for (ll i=head[x];~i;i=e[i].next)
    {
        ll v=e[i].to;
        if (!vis[v] && id==1 && e[i].flow) dfs1(v,id);
        if (!vis[v] && id==2 && e[i^1].flow) dfs1(v,id);
    }
}

int main()
{
    Q=read();
    while (Q--)
    {
        n=read(); m=read();
        for (ll i=1;i<n;i++) a[i]=read();
        a[n]=Inf;
        memset(head,-1,sizeof(head));
        tot=0;
        for (ll i=1;i<=m;i++)
        {
            X[i]=read(); Y[i]=read(); D[i]=read();
            add(X[i],Y[i],D[i],0);
            add(Y[i],X[i],D[i],0);
        }
        spfa(1,1); spfa(n,2);
        memset(head,-1,sizeof(head));
        tot=1; num=n; S=1; T=n; maxflow=0;
        for (ll i=1;i<=m;i++)
            if (dis[1][X[i]]+D[i]+dis[2][Y[i]]==dis[1][T])
            {
                num++;
                add(X[i],num,0,a[X[i]]);
                add(num,X[i],0,0);
                add(num,Y[i],0,a[Y[i]]);
                add(Y[i],num,0,0);
            }
            else if (dis[2][X[i]]+D[i]+dis[1][Y[i]]==dis[1][T])
            {
            	num++;
                add(Y[i],num,0,a[Y[i]]);
                add(num,Y[i],0,0);
                add(num,X[i],0,a[X[i]]);
                add(X[i],num,0,0);
			}
        dinic();
        memset(vis,0,sizeof(vis));
        dfs1(S,1); dfs1(T,2);
        sum=0;
        for (ll i=2;i<=tot;i++)
            if (vis[e[i].from] && vis[e[i].to] && vis[e[i].from]!=vis[e[i].to])
                sum+=e[i].flow;
        if (sum==maxflow) printf("Yes %lld\n",maxflow);
            else printf("No %lld\n",maxflow);
    }
    return 0;
}
2025年软件测试职业院校技能大赛—ERP管理平台-基础信息管理商品管理测试用例 竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。 阅读详情

相关推荐

Orcad 17.2导出PDF原理图终极指南:从Ghostscript安装到带属性书签配置

本文是Orcad 17.2导出高质量PDF原理图的终极指南。针对导出过程中常见的Ghostscript安装报错、软件卡死及版本兼容性问题,提供了详细的解决方案。重点推荐使用Ghostscript 9.53.3版本以确保最佳兼容性,并深入讲解了从安装配置、内存优化到高级书签属性设置的完整流程,帮助硬件工程师稳定、高效地生成带完整器件属性和导航书签的PDF文档。

weixin_29281915的博客 392

【JZOJ6094】循环流

Description 你曾经有一个循环流(每个点均满足流量平衡条件),这个流网络上有 n 个点, 且每条边的流量只有 1 或 2,可能有重边却没有自环。显然,由于它是一个流网络, 它是一个弱连通图(将边视为无向边后为连通图)。遗憾的是你找不到这个流了,但 你曾经记下了它流量为 1 的边的数量和流量为 2 的边的数量。由于这个图的点数有 点多,你很有可能数错边数,因此你现在想知道存不存在这样一个流...

sadnohappy 780

5.2 自抗扰控制 (ADRC)

自抗扰控制(Active Disturbance Rejection Control, ADRC)是由韩京清研究员于1998年提出的一种不依赖被控对象精确数学模型的新型控制技术[reference:0]。其核心思想是将系统的模型不确定性、内部参数摄动以及外部负载变化等所有影响统一定义为“总扰动”,通过一个名为扩张状态观测器(ESO)的环节对其进行实时估计并主动补偿,从而实现动态解耦和强鲁棒性。

技术工作者 1175

jzoj6094

题目描述 给定一个循环流(每个点均满足流量平衡条件),这个循环流有$n$个点,且每条边的流量只有 $1$ 或$ 2$,其中$a$条边流量为$1$,$b$条边流量为$2$,判断是否存在一个流满足上述条件. 多组数据,其中$T\leq127749$,$2\leq n\leq50$,$a,b\leq50$. 比赛记录 比赛的时候一直在想这道题,想到了一个结论,就是一个这样的合法的流一定是由若干...

weixin_30339969的博客 216

HarmonyOS ArkTS开发实战:用Axios封装一个通用的网络请求工具类(附完整代码)

本文详细介绍了如何在HarmonyOS ArkTS开发中利用Axios封装一个通用的网络请求工具类,涵盖架构设计、核心模块实现、UI状态联动及高级功能扩展。通过单例控制器、拦截器链配置和Token自动刷新机制,提升网络请求的稳定性和可维护性,适用于各类HarmonyOS应用开发场景。

weixin_30772105的博客 490

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

47、可行循环流

import random as rd import copy import time from pyscipopt import Model, quicksum def limit_low_and_up_generate(nums, n_min, n_max, flag = 1): limit_low = [[int((n_max-n_min) * rd.random() + n_...

chaoyuzhang的博客 394

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 261

[jzoj 3302] 【集训队互测2013】供电网络 {上下界最小费用最大流}

题目 解题思路 代码 #include<cstdio> #include<algorithm> #include<queue> #include<cstring> #define ll long long #define rep(i,x,y) for (register long long i=x;i<=y;++i) using name...

Nowed 362

LVDS接口总结--(0)LVDS硬件电路接口

xilinx LVDS接口硬件总结

zidan1412的博客 9715

音视频开发基础(1):模拟视频技术简介

模拟视频技术是指用模拟技术对动态影像进行捕捉、记来、处理、存储、传输、复现的技术.模拟视频技术的发明、发展与模拟电视系统的发展密不可分.下面将通过模拟电视系统来介绍模拟视频技术中的基本概念. 首先,人的视觉系统的特征为电视等視稿系铳的发明、发展提供了理论依据.光线通过角膜、腫孔、晶状体的折射光线.透过玻璃体到达视网展.视网膜上分布着光感受器,光感受器在光线的剌激下...

琅嬛福地 1492

cf708D(循环流+费用流)

这个题算是比较经典了。。 首先要解决流量不平衡的问题,这个可以用循环流解决,对于那些流量不平衡的点,分别向S和T连边获取额外的流量,然后跑满流就可以解决不平衡的问题了。。 然后对边, 如果没超容量就向普通边一样连边,容量为还可以流的流量,费用为1;再设一条容量无限的边,费用为2,代表容量和流量同时更改;对流量减少的操作,可以连反向边,容量为原流量,费用为1,代表撤销操作 如果超容量,就先手动...

qkoqhh 718

PCIe协议之 Equalization篇 之 理论篇 之 FFE

作为最后一道“精加工”工序,DFE利用其不放大噪声的优势,精准地消除残余的、强烈的后光标ISI,最终得到一个非常干净、张得很开的眼图,供判决器使用。信号经过信道衰减后变得模糊,首先由CTLE进行“粗调”,提供一个宽频带的增益,将眼图初步打开,为后面的DFE创造一个可以正常工作的信号环境。,它通过将输入信号在不同时间点上的多个副本(称为“抽头”)进行加权求和,来直接塑造或“整形”输出信号的波形。:这是最主要的信号路径,通常系数为正值,决定了信号的幅度。:将所有加权后的信号相加,产生最终的均衡输出。

那么菜的博客 751

JZOJ 3348. 【NOI2013模拟】秘密任务【网络流】【最小割】【最短路】

...题目:题意:分析:代码: 题目: 传送门 题意: 有一个反动派想通过各个城市中的高速公路走最短路前往NNN城,而我们需要在部分城市的入口或出口建立拦路点,但每个城市建立的费用是不一样的。我们需要求出最小的费用使得反动派无法走到NNN城 分析: 因为要在最短路上跑,所以我们直接在原图上跑一遍最短路,随后再在跑出来的最短路上建立网络流。 对于唯一性的判断,我们可以根据最小割的一条性质进行处...

qq_35786326的博客 257

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jzoj3348,bzoj3258-秘密任务【最短路,网络流最小割】

正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3258 题目大意 一张无向图,路有边权,在想要封锁某条路可以在该路两边的任意一点设置检查站(一个站只能封锁一条路),在iii点建立一个检查站要AiA_iAi​元。 求最少的费用封锁所有的最短路径,并询问封锁方案是否唯一 解题思路 先从111开始一遍最短路fff,然后从nnn开始再...

QuantAsk 564

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JZOJ 3348. 【NOI2013模拟】秘密任务(最短路+最小割唯一性)

JZOJ 3348. 【NOI2013模拟】秘密任务 题目 Description Input 第一行 包含一个正整数T,表示有T组测试数据。接下来依次是T组测试数据。 每组测试数据的第一行包含两个整N、M。 第二行包含 N - 1个正整数,依次表示 A1,A2, …,AN-1。 接下来 M行,每行为三个整数:ui、vi、ci,表示一条连接城市ui和城市vi的路程等于ci的高速公路。 Outpu...

ZSJZ_liuzian的博客 328

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JZOJ3348. 【NOI2013模拟】秘密任务

Description 给定无向图,有边权和点权,删去一条边的代价为这条边的任意一个顶点的权值,求一个最小代价的删边方案,使得1到n的在原图中的最短路都被断开。问最小代价,以及这个方案是否唯一。 2 ≤ N ≤ 400, 1 ≤ M ≤ 4 00 0,1 ≤ T ≤ 5,1 ≤ Ai, c ≤ 10^9。无向图可能有重边 。 Solution(一些很显然的东西) 显然建出最短路图,然后需要将...

Deep_Thinking的博客 269

欢乐纪中某A组赛【2019.7.10】

前言 好烦我最后写对了T1T1T1的808080分结果交错题导致T2T2T2的404040分没了T1T1T1也没拿多那些分。 话说好像ZDYZDYZDY比我还惨 成绩 这里还是按OJOJOJ上的分数排名 JJJ表示初中,HHH表示高中后面加的是几年级 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 333 ...

QuantAsk 534

【jzoj100003】【Tree】【网络流】

题目大意解题思路先按树边从上到下建图容量为能走的次数费用为零,能选的链从下往上连容量为一费用为价值的边。跑最大费用循环流即可,这个东西我也是第一次听说。对于本题,我们强制费用为正的边先流,这样我们就破坏了流量平衡,新建源和汇,入度减出度为正的点从源流容量为差值费用为零的边,为负的点流汇容量为差值费用为零的边,跑最小费用最大流,用强制流的费用和减去最小费用即为答案。code#include<set>

inklutcuah’s blog 469

【jzoj1504】【最短路】【普及模拟】城市连接

题目描述 天网恢恢,疏而不漏,经过上一次的抓捕,OI总部终于获取了怪盗的特征!现在,我们需要在基德再次来之前就把他的特征送到超级大牛的手上,可惜超级大牛不在总部,所以飞过海必须尽快把资料送到大牛家里。已知OI总部到大牛家中间有n-2个城城市,为了尽快达到目的地,飞过海通过水晶球了解到OI总部到大牛家的路线图,图上显示了n个城之间的连接距离。 可是飞过海很忙,需要请你来帮忙编写一个程序。 输入 输入...

蒟蒻的OI路 287

【JZOJ4003】【GDKOI2015】单词统计(网络流)

Problem Input   第一行一个整数 T,表示数据组数。   对于每一组数据:   第一行两个整数 n, m 表示矩阵大小。   接下来 n 行,每行 m 个字母,表示字符矩阵 mat。   再接下来有 n 行,每行 m 个数字,数字以空格隔开,表示数字矩阵 cnt。   最后一行一个不包含重复字符的单词 w。 Output   每组数据输出一行”Case ...

qq_36551189的博客 311

【JZOJ3949】【湖南省队集训2014】Hungry Rabbit(贪心or网络流)

Problem   给出n(≤800)只兔子在m(≤800)天内是否会被抓,然后求出一种在m天内每天派出k(≤n)只兔子的方案,要求保证该方案每次出去的兔子都不会被吃且相邻两天派出兔子的差异数不超过L(≤k)。 Solution   比赛时我觉得这题很奇怪,感觉可能是道贪心题,并且想了一下,但是思考方向有点问题;随后我又想到了网络流,但没想到怎么建图;于是最后就打了暴力。   正解的话...

qq_36551189的博客 536

【JZOJ4085】合唱问题(sing) (网络流二元关系)

Problem 甲乙两人要合唱一首有m个音符的歌,歌中每个音符音高都是1~n之间的正整数。 甲能够唱音高在[1,b]范围内的音符,乙能够唱音高在[a,n]范围内的音符。 现在两个人要合唱这首歌,要满足两个条件: 1、一个人不能唱他不能唱的音符。 2、为了保持韵律的和谐,所有音高相同的音符都要由同一个人演唱。 你所要求的东西在“编程任务”标题中。 对于给定的歌曲和甲乙能演唱的音高范围,...

qq_36551189的博客 277

【JZOJ 省选模拟】向日葵人生

Description Input Output Sample Input 样例 1 输入: 2 3 2 1 2 2 3 Sample Output 样例 1 输出: 665496241 Data Constraint Hint 思路 树上一条路径可行的概率是1/len.(len个点,第一个点要第一个选到) 环上做一个容斥:路径A可行+路径B可行-路径AB均可行。 仙人掌上做dp容斥即...

Brute♂force 533

JZOJ 1533. 郁闷的gxg

Description由于省赛的失利(难以理喻的失常),gxg心情十分沉痛—不能为校争光,也辜负了老师的一番陪养。除此以外更多的是郁闷,但gxg知道大学的大门不会因为自己的郁闷而为自己打开,所以一定要振作起来。为了排遣郁闷,gxg开始玩起了智力游戏。 游戏是这样子的: n个盒子被放成一圈,每个盒子按顺时针编号为1到n,(1<=n<=1000)。每个盒子里都有一些球,且所有盒子里球的总数不超过n。

Felix-Lee的博客 558

jzoj3597 【CQOI2014】危桥

Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1。某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行。其中一些桥由于年久失修成为危桥,最多只能通行两次。 Alice希望在岛屿a1和a2之间往返an次(从a1到a2再从a2到a1算一次往返)。同时,Bob希望在岛屿b1和b2之间往返bn次。这个过程中,所有危桥最多通行两次,其余的桥可以无限次通行。请问Alice

一位蒟蒻的小博客 280
上一篇: 【JZOJ3347】树的难题【树形dp】【拓扑排序】
下一篇: 【JZOJ3236】矮人排队【线段树】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值