Animals
蒟蒻

Day6-T4

原题目

  Describe:差分约束模板题吧。。。LG上竟然是省选+

  code:

#include<bits/stdc++.h>
#define INF 214748364
using namespace std;
int n,ml,md,flg,tot,x,y,z;
int son[10010],nxt[10010],w[10010],fir[1010];
queue<int>q;
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if (ch=='-') f=-f;ch=getchar();}
    while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
inline double read2(){
    double X=0,Y=1.0;int w=0;char ch=0;
    while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
    while(isdigit(ch))X=X*10+(ch^48),ch=getchar();
    ch=getchar();
    while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
    return w?-X:X;
}
inline void write(int x){
    if(x<0){putchar('-');write(-x);return;}
    if(x/10) write(x/10);
    putchar(x%10+'0');
}
void add(int x,int y,int z)
{
    w[++tot]=z;
    son[tot]=y;
    nxt[tot]=fir[x];
    fir[x]=tot;
}
int d[1010],cir[1010];
bool vis[1010];
inline void spfa(int k)                                       //SprprFA
{
    memset(vis,0,sizeof(vis));
    memset(cir,0,sizeof(cir));
    for(int i=1;i<=n;i++)d[i]=INF;
    d[1]=0,cir[1]=1;q.push(k);
    while(!q.empty())
    {
        int x=q.front();
        vis[x]=0;
        for(int i=fir[x];i;i=nxt[i])
        if(d[son[i]]>d[x]+w[i])
        {
            d[son[i]]=d[x]+w[i];
            if(++cir[son[i]]>=n){write(-1),exit(0);}
            if(!vis[son[i]])
            {
                q.push(son[i]);
                vis[son[i]]=1;
            } 
        }
        q.pop();
    }
}
int main()
{
    n=read(),ml=read(),md=read();
    for(int i=1;i<=ml;i++)x=read(),y=read(),z=read(),add(x,y,z);       //差分:转换成a+b>=C 其中C为常数
    for(int i=1;i<=md;i++)x=read(),y=read(),z=-read(),add(y,x,z);      //连负权
    for(int i=1;i<=n;i++)spfa(i);spfa(1);                              //判图连通性
    if(d[n]==INF)write(-2);
    else write(d[n]);
}

  

posted @ 2018-11-05 15:30  年下丶  阅读(84)  评论(0编辑  收藏  举报
--- 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 ---