zoukankan      html  css  js  c++  java
  • poj 3159 Candies (差分约束)

    一个叫差分约束系统的东西。如果每个点定义一个顶标x(v),x(t)-x(s)将对应着s-t的最短路径。

    比如说w+a≤b,那么可以画一条a到b的有向边,权值为w,同样地给出b+w2≤c,a+w3≤c。那么a到c的最大差就受这些不等式约束,对应着图中的最短路。

    这个边多,不要用vector存,满了以后重新复制数据,会T的,没试过指定大小。。。

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<queue>
    using namespace std;
    //POJ 是个坑
    const int maxn = 3e4+1;
    const int maxm = 15e4+5;
    struct Edge
    {
        int v,w,nxt;
        //Edge(int v = 0,int w = 0):v(v), w(w){}
    }edges[maxm];
    
    int ecnt,head[maxn];
    
    typedef pair<int,int> Node;
    #define fi first
    #define se second
    
    void addEdge(int u,int v,int w)
    {
        edges[++ecnt].v = v;
        edges[ecnt].w = w;
        edges[ecnt].nxt = head[u];
        head[u] = ecnt;
    }
    
    int d[maxn];
    
    const int INF = 0x7f7f7f7f;
    
    int dijkstra(int s, int t)
    {
        priority_queue<Node,vector<Node>,greater<Node> > q;
        memset(d,0x7f,sizeof(d));
        q.push(Node(d[s] = 0,s));
        while(q.size()){
            Node x = q.top(); q.pop();
            int u = x.se;
            if(u == t) return d[t];
            if(x.fi != d[u]) continue;
            for(int i = head[u]; i; i = edges[i].nxt){
                Edge &e = edges[i];
                if(d[e.v] - d[u] > e.w){
                    d[e.v] = d[u] + e.w;
                    q.push(Node(d[e.v],e.v));
                }
            }
        }
        return INF;
    }
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n,m; cin>>n>>m;
        while(m--){
            int u,v,w; scanf("%d%d%d",&u,&v,&w);
            addEdge(u-1,v-1,w);
        }
        printf("%d
    ",dijkstra(0,n-1));
        return 0;
    }
  • 相关阅读:
    启动nginx出错:open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
    linux vsftpd 550 create directory operation failed解决方法
    如何配置vsftpd
    配置<welcome-file>直接访问请求
    搭建solr集群的时候出现 ./zkcli.sh:行13: unzip: 未找到命令
    使用redis集群中遇到的错误
    存储过程
    查询
    sqlHelper
    一款批量修改AE模板的小工具
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4784575.html
Copyright © 2011-2022 走看看