差分约束求助
查看原帖
差分约束求助
275860
___A__楼主2024/5/31 17:39
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int n,T,id,dis[N];
struct graph{
    int v,w;
};
vector<graph>g[N];
void spfa(){
    bitset<N>vis;
    queue<int>q;
    for(int i=1;i<=n;i++){
        vis[i]=1,q.push(i);
        if(!dis[i]){
            dis[i]=1e9;
        }
    }
    while(!q.empty()){
        int u=q.front();
        q.pop(),vis[u]=0;
        for(auto [v,w]:g[u]){
            if(dis[u]+w<dis[v]){
                dis[v]=dis[u]+w;
                if(!vis[v]){
                    vis[v]=1,q.push(v);
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<dis[i]<<'\n';
    }
}
int main(){
    cin>>n>>id>>dis[id]>>T;
    for(int i=1;i<=n;i++){
        if(i!=id){
            g[id].push_back({i,0});
        }
    }
    for(int l,r;T--;){
        cin>>l>>r;
        if(l>r){
            swap(l,r);
        }
        g[r].push_back({l,0});
        for(int i=l+1;i<r;i++){//d[i]<=d[l]-1
            g[l].push_back({i,-1});
        }
    }
    spfa();
}
2024/5/31 17:39
加载中...