差分约束37pts求调
查看原帖
差分约束37pts求调
539133
q1uple楼主2023/3/3 11:56
#include<bits/stdc++.h>
using namespace std;
const int M=5e5+5;
struct node{
    int nxt,v,w;
}g[M];
int h[M],cnt1=0,vis[M],dis[M],cnt[M],n,m;
void add(int a,int b,int c)
{
    g[++cnt1].nxt=h[a];
    g[cnt1].v=b;
    g[cnt1].w=c;
    h[a]=cnt1;
}


int spfa()
{
    memset(dis,-0x3f,sizeof dis);
    queue<int>q;
    q.push(0);
    dis[0]=0;
    vis[0]=1;
    while (!q.empty())
    {
        int u=q.front();
        vis[u]=0;
        q.pop();
        for (int i=h[u];~i;i=g[i].nxt)
        {
            int v=g[i].v,w=g[i].w;
            
            if(dis[v]<dis[u]+v)
            {
                dis[v]=dis[u]+v;
                cnt[v]=cnt[u]+1;
                if(cnt[v]>=n+1)   return 0;
                if(!vis[v])
                {
                    q.push(v);
                    vis[v]=1;
                }
            }
        }
    }
    return 1;
}

int main()
{
    memset(h, -1, sizeof h);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,-c);       
    }
    for(int i=1;i<=n;i++)
        add(0,i,0);
    if(!spfa()) 
        puts("NO");
    else
    {
        for(int i=1;i<=n;i++)
            cout<<dis[i]<<" ";
    }
}
2023/3/3 11:56
加载中...