zoukankan      html  css  js  c++  java
  • 差分约束系统:排队布局

    题目https://loj.ac/problem/10090

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    long long n,l,d,k,x,a,b;
    struct node{
        long long to,next,w;
    }e[1000000];
    long long head[1000000],num=0;
    void add(long long x,long long y,long long c)
    {
        e[++num].next=head[x],e[num].to=y,e[num].w=c,head[x]=num;
    }
    long long tim[1000000],dis[1000000];
    bool vis[1000000];
    queue<long long>q;
    void spfa()
    {
        memset(dis,inf,sizeof dis);
        memset(vis,0,sizeof vis);
        long long ll=dis[n];
        vis[1]=1,dis[1]=0,tim[1]=1;//从1开始搜索 
        q.push(1);
        while(!q.empty())//bfs 
        {
            long long u=q.front();
            vis[u]=0;
            q.pop();
            for(long long i=head[u];i!=-1;i=e[i].next)
            {
                long long v=e[i].to;
                if(dis[v]>dis[u]+e[i].w)
                {
                    dis[v]=dis[u]+e[i].w;
                    if(!vis[v])
                    {
                        if(++tim[v]>n){
                            cout<<-1;exit(0);//不存在解(即存在环) 
                        }
                        q.push(v);
                        vis[v]=1;
                    }
                }
            }
        }
        if(dis[n]==ll){//判断1到n可以任意距离时 
            cout<<-2;
        } 
        else cout<<dis[n];
    }
    int main()
    {
        cin>>n>>l>>d;
        long long a,b,c;
        memset(head,-1,sizeof head);
        for(long long i=1;i<=l;i++)
        {
            cin>>a>>b>>c;
            a<b?add(a,b,c):add(b,a,c);//判断一下大小,严谨一些 
        }
        for(long long i=1;i<=d;i++)
        {
            cin>>a>>b>>c;
            a<b?add(b,a,-c):add(a,b,-c);
        }
        spfa();
    }

    我也不知道为什么我写的和他们差不多,但比他们慢了一百多毫秒......

    得到原因:数组开大了.......

  • 相关阅读:
    Java构造和解析Json数据的两种方法详解一
    微信小程序-自定义组件
    微信小程序
    微信公众号
    微信小程序
    微信小程序
    微信小程序
    vue
    vue
    sass 和 css 互转网址
  • 原文地址:https://www.cnblogs.com/719666a/p/9571906.html
Copyright © 2011-2022 走看看