求助50分
查看原帖
求助50分
1394325
Stalin_QwQ楼主2025/5/10 11:21

代码:

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const ll MAXN=1e5+5;
ll fa[MAXN];
ll dist[MAXN];
int find(int x){
    if(x==fa[x])return x;
    int root=find(fa[x]);
    dist[x]+=dist[fa[x]];
    return fa[x]=root;
}
void merge(int l,int r,ll v){
    int lf=find(l-1),rf=find(r);
    if(lf==rf)return;
    fa[lf]=rf;
    dist[lf]=dist[r]-dist[l-1]+v;
}
ll check(int l,int r){
    int lf=find(l-1),rf=find(r);
    if(lf!=rf)return -1;
    return abs(dist[r]-dist[l-1]); //abs()是因为不加就输出负数
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); 
    int N,M,Q;
    cin>>N>>M>>Q;
    for(int i=0;i<=N;i++)fa[i]=i;
    while(M--){
        int l,r;
        ll s;
        cin>>l>>r>>s;
        merge(l,r,s);
    }
    while(Q--){
        int l,r;
        cin>>l>>r;
        ll res=check(l,r);
        if(res==-1)cout<<"UNKNOWN\n";
        else cout<<res<<endl;
    }
    return 0;
}

WA:11~20 求助

2025/5/10 11:21
加载中...