zoukankan      html  css  js  c++  java
  • POJ 1062 Dijkstra

    POJ少有的中文题 (很久之前就想写来着,但是原来不会啊…..)
    思路:
    首先我们可以新建一个点,从这个点向每个物品连一条权值为这个物品价值的边 (这样就把点权转化成了边权对吧……)
    我们已经知道了一个物品的替代品是啥,那么就可以从每个替代品向这个物品连一条边权为替代品价值的边。
    是不是很有道理。。。

    随后枚举区间 (区间里得包括酋长的地位)

    每次枚举从新建的点向一号点跑一遍Dijkstra就OK了。

    //By SiriusRen
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #define N 100050
    using namespace std;
    int n,m,xx,yy,zz,ww,vis[105],d[105],answer=0x3fffffff;
    int tot=0,first[105],next[N],v[N],w[N],p[105];
    void add(int from,int to,int weight){
        v[tot]=to;w[tot]=weight;
        next[tot]=first[from];first[from]=tot++;
    }
    struct Node{int position,weight;}top,jy;
    bool operator < (Node a,Node b){
        return a.weight>b.weight;
    }
    priority_queue<Node>pq;
    int main(){
        scanf("%d%d",&m,&n);
        memset(first,-1,sizeof(first));
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&xx,&p[i],&zz);
            add(0,i,xx);
            while(zz--){
                scanf("%d%d",&xx,&ww);
                add(xx,i,ww);
            }
        }
        for(int T=-m;T<=0;T++){
            memset(d,0x3f,sizeof(d));
            memset(vis,0,sizeof(vis));
            xx=p[1]+T;yy=p[1]+T+m;
            d[0]=jy.position=0,jy.weight=0;pq.push(jy);
            while(!pq.empty()){
                top=pq.top();pq.pop();
                if(vis[top.position])continue;
                vis[top.position]=1;
                for(int i=first[top.position];~i;i=next[i])
                {
                    if(d[v[i]]>d[top.position]+w[i]&&!vis[v[i]]&&p[v[i]]>=xx&&p[v[i]]<=yy)
                    {
                        d[v[i]]=d[top.position]+w[i];
                        jy.position=v[i];
                        jy.weight=top.weight+w[i];
                        pq.push(jy);
                    }
                }
            }
            answer=min(answer,d[1]);
        }
        printf("%d
    ",answer);
    }
    

    这里写图片描述

  • 相关阅读:
    IP查询网和traceroute找到的网络出口不一致的原因
    [转载] 深入理解VMware虚拟机网络通信原理
    https工作流程
    HTTP1.1协议-RFC2616-中文版
    条件变量调用Signal的时候是否需要持有mutex
    HTTP Get一定是幂等的吗,统计访问量的时候呢?
    unix网络编程
    MySQL-SQL基础-DCL
    MySQL-SQL基础-查询1
    MySQL-SQL基础-子查询
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532324.html
Copyright © 2011-2022 走看看