【差分约束】POJ_1201 Intervals

本文介绍了一种利用最短路径算法解决特定序列问题的方法。通过构建图模型并运用松弛操作,可以高效地找到满足一系列条件的序列最小长度。该方法首先定义了节点间的距离关系,并通过SPFA算法求解最长路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

给出nnn个形如“a b c”“a\ b\ c”a b c的式子,表示在aaabbb之间至少有ccc个不同的数。求出满足这nnn个条件的序列的最小长度。

思路

d[i]d[i]d[i]0∼i0\sim i0i的数字中有多少个在序列里,由题意得db−da−1≥cd_b-d_{a-1}\geq cdbda1c

我们可以发现,这个式子很像最短路中的松弛操作dv>=du+w(u,v)d_v>=d_u+w(u,v)dv>=du+w(u,v)。那么我们把上面得出的式子移项,变成db≥da−1+cd_b\geq d_{a-1}+cdbda1+c,于是我们就可以在a−1a-1a1bbb中建一条长度为ccc的边。

由于ddd是有联系的,我们还发现两个条件di−di−1>=0;di−1−di>=−1d_i-d_{i-1}>=0;d_{i-1}-d_i>=-1didi1>=0;di1di>=1

按照这样建图后,根据db≥da−1+cd_b\geq d_{a-1}+cdbda1+c,我们就可以跑最长路求出ddd

代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>

int n, tot, s = 50000, t;
int head[50001], next[150001], ver[150001], edge[150001], v[50001], d[50001];

void add(int u, int v, int w) {
	ver[++tot] = v;
	next[tot] = head[u];
	edge[tot] = w;
	head[u] = tot;
}

void spfa() {
	std::queue<int> q;
	memset(d, -127 / 3, sizeof(d));
	v[s] = 1;
	d[s] = 0;
	q.push(s);
	while (q.size()) {
		int u = q.front();
		q.pop();
		v[u] = 0;
		for (int i = head[u]; i; i = next[i]) {
			int to = ver[i];
			if (d[to] < d[u] + edge[i]) {
				d[to] = d[u] + edge[i];
				if (!v[to]) {
					v[to] = 1;
					q.push(to);
				}
			}
		}
	}
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		int x, y, z;
		scanf("%d %d %d", &x, &y, &z);
		s = std::min(s, x - 1);
		t = std::max(t, y);
		add(x - 1, y, z);
	}
	for (int i = s + 1; i <= t; i++) {
		add(i, i - 1, -1);
		add(i - 1, i, 0);
	}
	spfa();
	printf("%d", d[t]);
}
一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值