社区讨论

莫名RE,求调试

SP116INTERVAL - Intervals参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo1c13kn
此快照首次捕获于
2023/10/22 18:34
2 年前
此快照最后确认于
2023/11/02 18:56
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 5e5 + 10;
const int R = 5e4 + 100;
int head[N];
int step[N];
int vis[N];
pair<int, int> p[N];
int n, m;
int tot;

struct node {
	int to, next, dis;
}edge[N];

void spfa() {
	memset(step, 0x3f, sizeof step);
	queue<int> que;
	que.push(R);
	step[R] = 0;
	while (que.size()) {
		int x = que.front();
		que.pop();
		for (int i=head[x]; i; i=edge[i].next) {
			int y = edge[i].to;
			int dis = edge[i].dis;
			if (step[y] > step[x]+dis) {
				step[y] = step[x]+dis;
				que.push(y);
			}
		}
	}
}

void add(int from, int to, int dis) {
	edge[++tot].to = to;
	edge[tot].dis = dis;
	edge[tot].next = head[from];
	head[from] = tot;
}

int input() {
	tot = 0;
	memset(head, 0, sizeof head);
	memset(edge, 0, sizeof edge);
	memset(vis, 0, sizeof vis);
	memset(p, 0, sizeof p);
	add(R, 0, 0);
	add(R, 5e4, 0);
	add(R, 5e4+1, 0);
	for (int i=1; i<5e4; i++) {
		add(i, i+1, 1);
		add(i+1, i, 0);
		add(R, i, 0);
	}
	cin >> n;
	for (int i=1; i<=n; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		a++, b++;
		p[i] = {a, b};
		add(b, a-1, -c);
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin >> t;
	while (t--) {
		input();
		spfa();
		int mx = 0;
		int mn = 1e9;
		for (int i=1; i<=n; i++) {
			mx = max(mx, p[i].second);
			mn = min(mn, p[i].first);
//			cout << p[i].first-1 << " " << step[p[i].first-1] << endl;
//			cout << p[i].second << " " << step[p[i].second] << endl;
//			mx = max(mx, max(step[p[i].second], step[p[i].first-1]));
		}
		cout << step[mx] - step[mn-1] << endl;
//		if (t) cout << endl;
	}
	return 0;
} 

回复

5 条回复,欢迎继续交流。

正在加载回复...