首页 > 其他分享 >小澳的葫芦 题解

小澳的葫芦 题解

时间:2024-09-30 16:35:12浏览次数:9  
标签:frac 葫芦 int 题解 void dijkstra step 小澳 dp

网上这么多大佬用 01 分数规划(完全不会),这里写一篇分层图造福社会。

前置芝士:最短路。

一个有向无环图,第一个想到的就是拓扑排序。

定义 \(dp(i)\) 为到达第 \(i\) 个点所需要的经过点数和边权和(一个 pair),正常转移即可。

然后就发现假了。

因为如果能够这样转移,就一定满足:

\[\frac{a}{x} \lt \frac{b}{y} \iff \frac{a + w}{x + 1} \lt \frac{b + w}{y + 1} (w \in \mathbb{N}) \]

但显然它不成立。

考虑 dp 数组多开一维。

\(dp(i, j)\) 为第 \(i\) 个点,走到这需要走 \(j\) 步时的最小的代价(因为当 \(a\) 一定时只有 \(b\) 最小才能使得 \(\frac{b}{a}\) 最小)。

转移就显而易见了。

\[dp(i, j) = \min _ {k \in g_i} dp(k, j - 1) \]

其中 \(g_i\) 表示图中所有能指向 \(i\) 的点的集合。

但此时我们就不能用拓扑排序,而需要用最短路(dijkstra 或者 SPFA 等)。

namespace zqh {
const int N = 205;

int n, m, dp[N][N], in[N];
vector<pii> g[N];

void dijkstra() {
	p_q<pii, vector<pii>, greater<pii>> q;
	memset(dp, 0x3f, sizeof(dp));
	q.push({1, 1});
	dp[1][1] = 0;
	while (q.size()) {
		int u = q.top().first, step = q.top().second;
		q.pop();
		for (auto [v, w] : g[u]) {
			if (dp[v][step + 1] > dp[u][step] + w) {
				dp[v][step + 1] = dp[u][step] + w;
				q.push({v, step + 1});
			}
		}
	}
}

void init() {
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back({v, w});
		in[v]++;
	}
}

void solve() {
	dijkstra();
	double ans = LLONG_MAX * 1.0;
	for (int i = 1; i <= n; i++) {
		ans = min(ans, (double)((double)(dp[n][i]) / (double)(i)));
	}
	cout << fixed << setprecision(3) << ans;
}

void main() {
	init();
	solve();
}
}  // namespace zqh

标签:frac,葫芦,int,题解,void,dijkstra,step,小澳,dp
From: https://www.cnblogs.com/zphh/p/18442088

相关文章

  • 题解:P6902 [ICPC2014 WF] Surveillance
    可以在cnblog中阅读。考虑弱化版链怎么做,每次选取左端点在当前位置前面的线段,跳到其中最大的右端点,可以维护一个数组表示起点为\(i\)的目标位置,可以做到\(O(n+k)\)。考虑多次询问一段区间\([l,r]\)的答案,这时如果暴力从\(l-1\)开始跳是\(O(n^2)\)的,只需要一个倍增数......
  • P11093 [ROI 2021 Day 2] 树制游戏 题解
    考虑对于一个解,将每对\((e_1,e_2)\)中\(e_1\)的终点权值\(+1\),\(e_2\)的起点权值\(-1\),那么最终每个点的权值一定是\(0\)。考虑先将每条边的终点权值都\(+1\),那么现在要做的就是选一些点将其起点和终点的权值都\(-1\),使得最终每个点的权值为\(0\),于是边的方向就不重要......
  • CF582D Number of Binominal Coefficients 题解
    CF582DNumberofBinominalCoefficients题解纪念一下自己第一道独立A掉的黑题/CF3300。题目大意给定质数\(p\)和整数\(\alpha,A\),求满足\(0\lek\len\leA\)且\(p^{\alpha}|\binomnk\)的数对\((n,k)\)的个数。Solve首先,我们引入Kummer定理,即:\(p\)在......
  • [ARC061E] すぬけ君の地下鉄旅行 题解
    题目传送门一些废话今天登洛谷的时候发现主页少了一道紫题。???怎么降绿了(建议升蓝)???AND这是蒟蒻的第一篇题解简介很容易地想到,这是一道最短路问题,要求在一个有\(N\)个站点和\(M\)条地铁线路的图中,从站点\(1\)到站点\(N\)的最小花费。每条线路由一个公司运营,乘坐同一......
  • 题解:AT_arc071_c [ARC071E] TrBBnsformBBtion
    首先看到这个奇特的转化方式和常规的数据范围,我们不难想到一定有什么规律。我们可以先想一个转化后的问题:每次询问的两个字符串都可以按照题目要求进行转化,问它们最后能不能转化成同一个字符串。这个问题很简单,我们只需要把两个字符串中的A全都换成BB,最后对\(3\)取模,看看此......
  • 【题解】【模拟,字符串】—— [NOIP2011 普及组] 统计单词数
    【题解】【字符串】——[NOIP2011普及组]统计单词数[NOIP2011普及组]统计单词数题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2011普及组]统计单词数通往洛谷的传送门题目描述一般的文本编辑器都有查找......
  • 【题解】【子集枚举】—— PERKET
    【题解】【子集枚举】——PERKET[COCI2008-2009#2]PERKET题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2输入#3输出#3提示数据规模与约定说明1.思路解析2.AC代码[COCI2008-2009#2]PERKET通往洛谷的传送门题目描述Perket是一种流行......
  • Luogu P5663 CSP-J2019 加工零件 题解 [ 绿 ] [ 同余最短路 ]
    加工零件:非常好的一道图论题。CCF普及组的题目大概也只有图论出的比较巧妙了。题意简述:给你一张无向图,\(q\)次询问,判断是否存在一条从\(a\)到\(1\)且长度为\(L\)的路径。看到\(L\)很大,我们立刻想到了要撇开\(L\)的限制思考问题。首先,对于一条路径,我们肯定能找到从......
  • Hetao P2071 打字游戏 题解 [ 绿 ] [ 最小生成树 ] [ 动态规划 ] [ 编辑距离 ]
    打字游戏:MST套dp好题。首先看这个数据范围,\(O(n^4)\)把每两个字符串之前的编辑距离求一下很显然吧。然后我们观察一下每一个node的性质,发现他要么自己打完,要么从别人那里复制过来。这个就很像一棵树。建完树之后,我们就得到了一个森林。那么题目就转化为,求出一个边权之和......
  • Windows 笔记本 WiFi 功能消失问题解决
    背景说明许多Windows笔记本用户可能会遇到WiFi功能突然消失的问题。虽然网上有各种说法,但实际上,这个问题通常并非由病毒引起。大多数情况下,问题的根源是驱动程序丢失或笔记本静电干扰导致无线网卡无法正常工作。临时联网在解决WiFi问题期间,需要联网,可以尝试以下方法:使......