这题求负环为什么还要初始化dis数组
查看原帖
这题求负环为什么还要初始化dis数组
434015
Calanosay楼主2021/5/28 13:26
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e4+5;
const int maxm=maxn;
int head[maxn],w[maxm],v[maxm],nex[maxm],cnt,dis[maxn],vis[maxn];
int ans[maxn];
void add(int x,int y,int z){
    v[++cnt]=y;
    w[cnt]=z;
    nex[cnt]=head[x];
    head[x]=cnt;
}
int n,m;
bool spfa(){
    queue<int> q;
    memset(dis,-0x3f,sizeof dis);
    q.push(0);
    //vis[0]=1;
    while(!q.empty()){
        int node=q.front();q.pop();vis[node]=0;
        for(int i=head[node];i;i=nex[i]){
            int to=v[i];
            if(dis[to]<dis[node]+w[i]){
                dis[to]=dis[node]+w[i];
                ans[to]=ans[node]+1;
                if(ans[to]>n)   return false;
                if(!vis[to]){
                    q.push(to);
                    vis[to]=1;
                }
            }
        }
    }
    return true;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        add(x,y,-z);
    }
    for(int i=1;i<=n;i++)   add(0,i,0);
    if(!spfa()) cout<<"NO"<<endl;
    else  {
        for(int i=1;i<=n;i++)   cout<<dis[i]<<' ';
    }
}

RT,不初始化-0x3f就0分,初始化了就ac,是数据范围的问题还是什么,我记得判负环是不用初始化dis数组的

2021/5/28 13:26
加载中...