首页 > 其他分享 >P10934 西瓜种植 解题报告

P10934 西瓜种植 解题报告

时间:2024-09-01 21:03:03浏览次数:12  
标签:西瓜 dist idx int P10934 差分 vis 解题 建边

题目传送门

这道题也可以用贪心来做,这里讲一下差分约束的做法。

看到题中给出了 \(m\) 条限制性的语句就联想到差分约束(差分约束的题还是很显眼的)。

做差分约束的题首先得把题面抽象成很多个不等式,所以我们先来转化一下题意。

首先发现求最小值,那么先确定转化方向:将所有条件转换成大于或大于等于,然后建边跑最长路

设 \(x_i\) 表示前 \(i\) 块地共种了多少个西瓜。

那么对于每个关系可以理解为 \(sum_b - sum_{a - 1} \ge c\),就是说 \([a, b]\) 这块地种的西瓜数量要大于等于 \(c\),那么就从 \(a - 1\) 向 \(b\) 连一条长度为 \(c\) 的有向边。

但是光这样建边你会发现根本做不了一点,因为你根本不知道该从哪里开始跑最长路,而且无法正确求解。

这就是这道题非常有意思的一点,因为除了给出的数据需要建边,还有隐藏的建边关系。

注意:

每处最多只能种一个西瓜。

这其实隐藏了一个关系:\(\forall i \in [1,n],0\le x_i - x_{i - 1} \le 1\)。

拆开来看就是:

\[\begin{cases} x_i - x_{i - 1}\ge 0\\ x_{i - 1} - x_i\ge -1 \end{cases} \]

所以,要从 \(i - 1\) 向 \(i\) 连一条长度为 \(0\) 的有向边,
从 \(i\) 向 \(i - 1\) 连一条长度为 \(-1\) 的有向边。

综上,再根据刚刚的建图方式,从 \(0\) 号点跑最长路,答案就是 \(x_n\)。

\(\texttt{Code:}\)

#include <queue>
#include <cstring>
#include <iostream>

using namespace std;

const int N = 30010, M = 100010;

int n, m, C;
int h[N], e[M], w[M], ne[M], idx;
int dist[N];
bool vis[N];

void add(int a, int b, int c) {
	e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

int ans;
void spfa(int s) {
	queue<int> q;
	q.push(s);
	memset(dist, -0x3f, sizeof dist);
	dist[s] = 0;
	vis[s] = true;
	while(q.size()) {
		int t = q.front();
		q.pop();
		vis[t] = false;
		for(int i = h[t]; ~i; i = ne[i]) {
			int j = e[i];
			if(dist[j] < dist[t] + w[i]) {
				dist[j] = dist[t] + w[i];
				if(!vis[j]) {
					vis[j] = true;
					q.push(j);
				}
			}
		}
	}
}

int main() {
	memset(h, -1, sizeof h);
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++) {
		add(i - 1, i, 0);
		add(i, i - 1, -1);
	}
	for(int i = 1, a, b, c; i <= m; i++) {
		scanf("%d%d%d", &a, &b, &c);
		add(a - 1, b, c);
	}
	spfa(0);
	printf("%d", dist[n]);
	return 0;
} 

标签:西瓜,dist,idx,int,P10934,差分,vis,解题,建边
From: https://www.cnblogs.com/Brilliant11001/p/18391734

相关文章

  • P10935 银河 解题报告
    题目传送门这道题很有意思,(看上去像数据结构似的),考察的就是差分约束的掌握熟练程度和Tarjan算法的灵活变通。首先发现要求最小值,所以跑最长路,并将所有关系都转化成大于或大于等于。设\(x_i\)表示第\(i\)颗恒星的亮度值。一共有五种关系,分类讨论:第一种操作:\(x_a=x_b\),......
  • P10958 启示录 解题报告
    更好的阅读体验用记忆化搜索写数位dp真的很好写!题目传送门题目大意:\(T\)组数据,每次询问第\(x\)个含有至少\(3\)个连续\(6\)的数是什么。思路:考虑数位dp。一般数位dp问题有两种常见形式:询问\([l,r]\)内有多少个符合条件的数;询问满足条件的第\(k\)大(小)的......
  • 解题招商蛇口上半年:稳中求进,坚持高质量发展
    来源:中国网近年来,房地产市场维持震荡格局,市场信心不足、销售承压、融资受阻等多重压力叠加下,行业洗牌速度进一步加快。在此背景下,招商蛇口等龙头房企依然保持财务状况安全、稳健,持续“稳中有进”,坚持高质量发展。8月30日晚,招商蛇口(001979.SZ)发布半年度业绩报告。报告期内,......
  • 信奥赛一本通陈老师解题 1123:图像相似度
    ​【题目描述】给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。【输入】第一行包含两个整数m和n,表示图像的行数和列数,......
  • 信奥赛一本通陈老师解题 1128:图像模糊处理
    ​ 【题目描述】给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:1.四周最外侧的像素点灰度值不变;2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。【输入】第一行包含两个整数n和m,表示图像包含像素......
  • 信奥一本通题南沙陈老师解题 1058:求一元二次方程
     【题目描述】【输入】输入一行,包含三个浮点数a,b,ca,b,c(它们之间以一个空格分开),分别表示方程ax2+bx+c=0ax2+bx+c=0的系数。【输出】输出一行,表示方程的解。若两个实根相等,则输出形式为:“x1=x2=...x1=x2=...”;若两个实根不等,在满足根小者在前的原则,则输出形式......
  • P10975 Mondriaan's Dream 解题报告
    题目传送门题目大意给定一个\(N\timesM\)的网格,求用\(1\times2\)和\(2\times1\)的长方形去铺满它有多少种方案。数据范围:\(N,M\le11\)。思路:考虑怎么放才能刚好填满网格。可以想到,如果先放横着的,再放竖着的,那么当我们将横着的都放完后,若竖着的恰好能刚好嵌进去,说......
  • 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐
    前言对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。CTF在线工具首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。1、CTF在线工具箱:http://ctf.ssleye.com/包含CTF比赛中常用的......
  • AT_tdpc_number 数 解题报告
    题目大意求\([1,N]\)中有多少个数在十进制表示下数码和是\(D\)的倍数。数据范围:\(1\leN\le10^{10000},1\leD\le100\)。思路很明显的数位dp。这里采用了记忆化搜索来实现数位dp。记忆化搜索实现比较板子,不光写起来比较简单,而且容易扩展,所以建议大家都学习一下。......
  • 南沙区信奥赛CSP-J/S 陈老师解题:1350:【例4-11】最短网络(agrinet)
    ​ 【题目描述】农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一......