zoukankan      html  css  js  c++  java
  • Luogu P4878 [USACO05DEC]布局

    题目
    差分约束模板。
    注意判负环需要建一个超级源点到每个点连一条(0)的边。因为(1)不一定能到达所有的点。

    #include<bits/stdc++.h>
    #define pi pair<int,int>
    #define pb push_back
    using namespace std;
    int read(){int x;scanf("%d",&x);return x;}
    const int N=1007,inf=0x3f3f3f3f;
    vector<pi>E[N];int n,m1,m2,dis[N],vis[N],d[N];queue<int>q;
    void add(int u,int v,int w){E[u].pb(pi(v,w));}
    void spfa(int s)
    {
        memset(dis,0x3f,sizeof dis),memset(vis,0,sizeof vis),memset(d,0,sizeof d),q.push(s),vis[s]=1,dis[s]=0;
        for(int u;!q.empty();)
        {
    	u=q.front(),q.pop(),vis[u]=0;
    	for(auto [v,w]:E[u])
                if(dis[u]+w<dis[v])
                {
    		dis[v]=dis[u]+w,d[v]=d[u]+1;
    		if(d[v]>=n) puts("-1"),exit(0);
                    if(!vis[v]) vis[v]=1,q.push(v);
                }
        }
    }
    int main()
    {
        n=read(),m1=read(),m2=read();
        for(int i=1;i<=n;++i) add(0,i,0);
        for(int i=1,a,b,d;i<=m1;++i) a=read(),b=read(),d=read(),add(a,b,d);
        for(int i=1,a,b,d;i<=m2;++i) a=read(),b=read(),d=read(),add(b,a,-d);
        spfa(0),spfa(1),printf("%d",dis[n]==inf? -2:dis[n]);
    }
    
  • 相关阅读:
    iOS,Layer
    iOS 手势冲突
    ECharts
    手动安装Package Control
    webstorm配置svn详解
    js 对象 类型转换
    google 跨域解决办法
    关于内层DIV设置margin-top不起作用的解决方案
    图片与文字在div里实现垂直水平都居中
    css3之3D翻牌效果
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/11919754.html
Copyright © 2011-2022 走看看