社区讨论

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 条回复,欢迎继续交流。

正在加载回复...