社区讨论
RE求调
SP116INTERVAL - Intervals参与者 2已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo136xnt
- 此快照首次捕获于
- 2023/10/22 14:27 2 年前
- 此快照最后确认于
- 2023/11/02 13:56 2 年前
CPP
/*
* @Author: Nekopedia
* @Date: 2023-10-14 12:56:09
* @Last Modified by: Nekopedia
* @Last Modified time: 2023-10-14 13:10:21
*/
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll rd(){
ll x = 0, f = 1; char c = getchar();
while(! isdigit(c)){if(c == '-')f = - f; c = getchar();}
while(isdigit(c)){x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}
return x * f;
}
const int N = 1e5 + 5;
int n, a[N], hd[N], cnt, d[N];
struct edge{
int nxt, to, w;
}e[N];
void add(int u, int v, int w){
e[++cnt] = {hd[u], v, w}; hd[u] = cnt;
}
bool vis[N];
int s, t;
void spfa(){
memset(d, - 1, sizeof d);
memset(vis, 0, sizeof vis);
queue < int > q;
d[s] = 0; vis[s] = true; q.push(s);
while(! q.empty()){
int u = q.front(); q.pop();
vis[u] = 0;
for(int i = hd[u]; i; i = e[i].nxt){
int v = e[i].to, w = e[i].w;
if(d[v] < d[u] + w){
d[v] = d[u] + w;
if(! vis[v])q.push(v), vis[v] = 1;
}
}
}
}
signed main(){
int T = rd();
while(T--){
memset(hd, 0, sizeof hd); n = rd(); s = N, t = 0;
for(int i = 1; i <= n; ++i){
int l = rd(), r = rd(), c = rd();
add(l - 1, r, c);
s = min(s, l - 1); t = max(t, r);
}
for(int i = s; i <= t; ++i)add(i, i + 1, 0), add(i + 1, i, - 1);
spfa();
printf("%d\n", d[t]);
}
return 0;
}
本地过样例,提交RE。
回复
共 7 条回复,欢迎继续交流。
正在加载回复...