zoukankan      html  css  js  c++  java
  • POJ 1201 差分约束+SPFA

    思路:
    差分约束,难在建图。(我是不会告诉你我刚学会SPFA的。。。)

    把每个区间的ai–>bi连一条长度为ci的边。
    k–>k+1连一条长度为0的边。
    k+1–>k连一条长度为-1的边。
    求最长路即可。

    // by SiriusRen
    #include <queue>
    #include <cstdio>
    #include <algorithm>
    #define N 55555
    using namespace std;
    int w[N*3],v[N*3],first[N],next[N*3],tot=2;
    int n,xx,yy,zz,minn=N,maxx=0,d[N];
    bool vis[N];
    queue<int>q;
    void add(int x,int y,int z){
        w[tot]=z,v[tot]=y;
        next[tot]=first[x];first[x]=tot++;
    }
    void spfa(int x){
        vis[x]=1,d[x]=0,q.push(x);
        while(!q.empty()){
            int temp=q.front();q.pop(),vis[temp]=0;
            for(int i=first[temp];i;i=next[i])
                if(d[temp]+w[i]>d[v[i]]){
                    d[v[i]]=d[temp]+w[i];
                    if(!vis[v[i]])q.push(v[i]),vis[v[i]]=1;
                }
        }
    }
    int main(){
        scanf("%d",&n);
        while(n--)scanf("%d%d%d",&xx,&yy,&zz),add(xx,yy+1,zz),minn=min(minn,xx),maxx=max(maxx,yy+1);
        for(int i=minn;i<maxx;i++)add(i,i+1,0),add(i+1,i,-1);
        spfa(minn);
        printf("%d
    ",d[maxx]);
    }
  • 相关阅读:
    web框架本质及第一个Django实例
    jQuery练习题HTML文件
    jQuery快速入门
    前端之JS
    前端基础之HTML
    前端基础之css
    并发编程之 协程
    Linux目录结构详解
    第三周 time库
    网络打印机拒绝访问,无法连接处理方法汇总
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532359.html
Copyright © 2011-2022 走看看