首页 > 其他分享 >P7831 [CCO2021] Travelling Merchant

P7831 [CCO2021] Travelling Merchant

时间:2023-12-19 12:12:11浏览次数:44  
标签:Merchant 当前 P7831 拓扑 答案 Travelling 排序 出度 dp

题意不多赘述。

注:全文所用的“点 \(u\) 的出度”均指的是点 \(u\) 在原图上的出度。

首先我们考虑 \(r_{i} = 0\) 的情况怎么写,这时我们会发现要么答案是 \(0\) 要么无解。当当前点 \(u\) 无论怎么走都走不到一个环上,即无论怎么走最终都会走到一个出度为 \(0\) 的点上的话,那么显然这个点是无解的。否则一定有解,因为可以先走到一个环上,然后在环上无限走。

然后考虑正解。可以发现一些性质:

  • 性质一:如果一个点的出度为 \(0\) 的话,那么这个点一定无解。

  • 性质二:对于一条边 \(u \to v\),如果点 \(v\) 的出度为 \(0\) 的话,那么删除这条边对答案没有影响。

  • 性质三:如果当前边 \(u \to v\) 的 \(r\) 值是它所在环中 \(r\) 值最大的,那么 \(u\) 点的答案一定小于等于当前 \(r\)。

  • 性质四:如果当前边 \(u \to v\) 的 \(r\) 值是剩下所有边中 \(r\) 值最大的,那么 \(u\) 点的答案一定小于等于当前 \(r\)。

那么我们可以先考虑一个类似于拓扑序上 dp 的东西,设 \(dp_{v}\) 表示 \(v\) 点的答案,对于一条边 \(u \to v\),则有:

\(dp_{u}=\min(dp_{u},\max(r_{u \to v},dp_{v}-p_{u \to v}))\)。

因为 dp 方程的转移 \(u\) 和 \(v\) 是反过来的,所以建反图跑 dp。

但是给定的图不是 DAG,不好直接在拓扑序上 dp,于是考虑加上一些贪心。

先将所有边按照 \(r\) 的值从大到小排序,枚举每一条边。对于每一条边先进行一次拓扑排序,在队列里的点表示当前点的 dp 值已经确定了的点,遍历它的出边 \(u \to v\),用它来更新其它点即可。注意拓扑排序中遍历过的边可以直接删除了,因为 dp 值已经转移了,所以这条边已经没有任何价值了。同时 \(v\) 点的出度减一,如果 \(v\) 点的出度变为 \(0\) 了,则入队。

进行完拓扑排序过后,如果当前枚举到的边还没有被删除的话,那么可以直接用性质四来更新答案,并将这条边删掉。因为如果一条边会被删掉必须满足它只能走到一些出度为 \(0\) 的点上,而这条边还没有被删除所以它一定在一个环中,又因为 \(r\) 值是从大到小枚举的,所以可以这样更新。

排序时间复杂度 \(O(m \log m)\),dp 时间复杂度 \(O(m)\),总时间复杂度 \(O(m \log m)\)。

标签:Merchant,当前,P7831,拓扑,答案,Travelling,排序,出度,dp
From: https://www.cnblogs.com/Creeperl/p/17913414.html

相关文章

  • CF685E Travelling Through the Snow Queen's Kingdom
    题意给定一张图,走出当前边的时间为\(i\)。\(q\)次询问,问\(s\)是否能在\(l\tor\)中走到\(t\)。Sol考虑将边从大到小插入图中。注意到当前边只能对起点造成贡献。复杂度\(O(n\times\max\{n,m\})\)Code#include<iostream>#include<algorithm>#include<cstd......
  • P7831 [CCO2021] Travelling Merchant CWOI1113B
    首先将边反向,再按\(r\)从大到小排序,这样可以使得答案的转移没有后效性。令\(ans_i\)表示\(i\)这个点最少有多少资产方能无限地走下去。(初值为\(inf\))依次枚举每一条边。(令\(u\)为这条边的起点,\(v\)为这条边的终点)首先对现在的图进行一遍topo,转移方程为\(ans_v=m......
  • Codeforces 512D. Fox And Travelling 题解
    FoxAndTravelling题面翻译给定一张\(n\)个点\(m\)条边的无向图。一个点只有当与它直接相连的点中最多只有一个点未被选择过时才可被选择。询问对于每个\(k\in[0,n]\),有序选择\(k\)个点的方案数。\(n\le100\),\(m\le\frac{n(n-1)}2\),答案对\(10^9+9\)取模。......
  • Travelling Salesman and Special Numbers
    prologue模拟赛的一道题,结果没做出来,丢大人,败大兴。所以过来糊一篇题解。analysis我们看到数据范围这么大,那么肯定不可以一个一个遍历(废话),所以就要考虑这个题目的性质。我们先假设,极端数据\(2^{1000}-1\),这个数字中包含了\(999\)个1(正好感冒了能不能让我喝了)。下一次......
  • UVA10702 Travelling Salesman 题解
     UVA10702TravellingSalesman题解题面:有个旅行的商人,他每到一个的新城市,便卖掉所有东西再购买新东西,从而获得利润。从某城市A到某城市B有固定利润(B 到A 的利润可能不同)。已知城市可以重复到达,从S 点出发,经过T 个城市,有E个城市能作为终点,求最大的利润。先定义......
  • P7831 题解
    problem&blog。妙妙题。单杀了,来写篇题解。下文中\(ans_u\)表示从\(u\)点出发的答案。考虑直接做。发现更新任何一个点,都可能会对一堆点造成影响,\(O(n^2)\)无法接受。一些简单的性质:不能进入一个环的\(ans_u=-1\)。否则,对于\((u,v,r,p)\),\(r\)是最大的\(r\),那么只......
  • CF512D Fox And Travelling 题解--zhengjun
    计数好题。首先对于每个连通块独立考虑,最后合并答案。发现点数超过1的强连通分量一定删不掉。若连通块中存在点数超过1的强连通分量tarjan缩点之后,称这些点数超过1的强连通分量为关键点;那么两关键点之间的点也不能删;于是对于剩下的点直接dp即可,由于可删的子树......
  • POJ 3728 The merchant
    题意好像不清楚:给定一棵\(n​\)个点的树,每个点有点权\(val_i​\),现在有\(q​\)个询问,每次询问给出\(u,v​\),设\(u​\)到\(v​\)的路径上的点编号为\(a_1,a_2\cdotsa_{len}​\),求\(\max\limits_{1\lex<y\lelen}{val_{a_y}-val_{a_x}}​\)。因为\(x,y\)有顺......
  • 排序01背包 Problem W:Proud Merchants(HDU 3466)
    ProblemWTimeLimit:2000/1000ms(Java/Other)   MemoryLimit:131072/65536K(Java/Other)TotalSubmission(s):2   AcceptedSubmission(s):1ProblemDesc......
  • HDU 5402 Travelling Salesman Problem
    ProblemDescriptionn rowsand m columns.Thereisanon-negativenumberineachcell.TeacherMaiwantstowalkfromthetopleftcorner (1,1......