Diary_3.14

1.

#define int long long
const int maxn = 4e4+10;
int n, ml, mr, inf = 1e10, tol, dis[1010];
struct Edge{
    int u, v, w;
};
Edge edge[maxn];
void solve(){
    cin >> n >> ml >> mr;
    for(int i=2; i<=n; i++){
        edge[tol++] = {i, i-1, inf};
    }
    for(int i=2; i<=n; i++) dis[i] = inf;
    dis[1] = 0;
    for(int i=0; i<ml; i++){
        int u, v, w;    cin >> u >> v >> w;
        // dis[v]-dis[u] <= w
        edge[tol++] = {v, u, w};
    }
    for(int i=0; i<mr; i++){
        int u, v, w;    cin >> u >> v >> w;
        // dis[v]-dis[u] >= w
        // dis[u]-dis[v] <= -w
        edge[tol++] = {u, v, -w};
    }
    for(int i=0; i<n; i++){
        for(int k=0; k<tol; k++){
            int u = edge[k].u, v = edge[k].v, w = edge[k].w;
            if(dis[u]-dis[v] > w){
                dis[u] = dis[v]+w;
            }
        }
    }
    for(int i=0; i<tol; i++){
        int u = edge[i].u, v = edge[i].v, w = edge[i].w;
        if(dis[u]-dis[v] > w){
            cout << -1 << endl;
            return;
        }
    }
    if(dis[n] == inf){
        cout << -2 << endl;
        return;
    }
    cout << dis[n] << endl;
}
posted @ 2025-03-14 15:17  Devpp  阅读(15)  评论(0)    收藏  举报