zoukankan      html  css  js  c++  java
  • POJ -1062 昂贵的聘礼(前向星 && SPFA)

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/u013497151/article/details/30299671

    题目链接:昂贵的聘礼


       这个题对自己收获挺大的。模板要自己常常敲,才干理解。要自己常常敲,从能温故而知新。自己曾经总结的建图方式。做题的时候要会用,要敢用。否则==NULL。




    题意对于交换条件描写叙述的有点不清楚,这里解释一下,如果8件物品,等级差距不能超过3。酋长LV 5。所以能够进行交换的LV区间是[2,5][3,6][4,7][5,8]。不必考虑题目那一句。“可是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易。他们觉得这样等于是间接接触,反过来也一样”。

    越看越晕。仅仅要符合以上区间的都能够进行交换。


    思路:開始看题时。自己的思路有点偏差,觉得P神仅仅能从价格最廉价、等级最低的那个人開始首次交易,后来敲了。。。再后来。。无从下手了,看了一下Discuss,噢。枚举啊。Discuss上的神牛门大多用Dijkstra 或 Bellman-Ford过的,还剪枝...俺还没学啊。然后,我想Bellman-Ford能过的SPFA肯定也能过。可是SPFA怎么敲,忘了。

    。又又一次复习最短路 And 建图方式,开敲1遍A。中间的小细节自己处理的不好,还不会调程序。又叫P神过来了。

    。。。

    ME        TIME

    720kb    32ms


    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    const int Size = 99999;
    const int INF = 1<<20;
    const int N = 101;
    const int MMM = 10010;
    using namespace std;
    int NN,M,l = 0;
    struct node{
        int v,w,next;
    }edge[MMM];
    int p[N],lv[N],num,t;
    int dis[N],vis[N],lim,low;
    int q[MMM],head[MMM];
    
    int SPFA(int S,int E)
    {
        //printf("low = %d high = %d
    ",low,lim);
        int s = 0,e = 0;
        for(int i = 1;i<=N;i++)
            dis[i] = p[1];
        dis[S] = 0;
        q[e++] = S;
        vis[S] = 1;
        while(s < e)
        {
            int tmp = q[s++];
            for(int i = head[tmp];i!=0;i=edge[i].next)
            {
           if((lv[edge[i].v]>=low && lv[edge[i].v]<=lim )&& (dis[edge[i].v]> dis[tmp] + edge[i].w))
                {
                    dis[edge[i].v] = dis[tmp] + edge[i].w;
                    if(!vis[edge[i].v])
                    {
                        q[e++] = edge[i].v;
                        vis[edge[i].v] = 1;
                    }
                }
            }
            vis[tmp] = 0;
        }
        return dis[E];
    }
    void add(int a,int b,int c) //前向星建图
    {
        edge[t].v = b;
        edge[t].w = c;
        edge[t].next = head[a];
        head[a] = t;
        t++;
    }
    /*void Print()
    {
        int k,i;
        for(i = 0; i <= NN; i++)
        {
            if(head[i])
            {
                for(k = head[i]; k != 0; k = edge[k].next)
              {
                printf("%d->%d %d
    ", i, edge[k].v, edge[k].w);
              }
            }
        }
    }*/
    int main()
    {
        int a,b;
        while(~scanf("%d%d",&M,&NN))
        {
            l = 0;
            t = 1;
            memset(head,0,sizeof(head));
            for(int i = 1;i<=NN;i++)
            {
                scanf("%d%d%d",&p[i],&lv[i],&num);
                add(0,i,p[i]);
                for(int j = 0;j<num;j++)
                {
                 scanf("%d%d",&a,&b);
                 add(a,i,b);
                }
            }
            /*puts("-------------");
            Print(); //打印图形
            puts("-------------");*/
    
            int minn = INF,flag = 0;
            for(int i = lv[1]-M;i<=lv[1];i++) //枚举全部可行交换
            {
                lim = i + M;
                low = i;
                memset(vis,0,sizeof(vis));
                flag = SPFA(0,1);
                (flag < minn)?(minn = flag):(minn=minn);
            }
            printf("%d
    ",minn);
        }
        return 0;
    }
    


  • 相关阅读:
    [云计算&大数据]概念辨析:数据仓库 | 数据湖 | 数据中心 | 数据中台 | 数据平台 【待续】
    [云计算]概念辨析:云计算 [IaaS/PaaS/SaaS & 公有云/私有云/混合云]
    [Linux]浅析"command > /dev/null 2>&1 &" 与 "command 1>/dev/null 2>&1 &"
    [Python]【Form Data vs Request Payload】之 python 爬虫如何实现 POST request payload 形式的请求
    [Python]PyCharm中出现unresolved reference的解决方法
    [数据库/MYSQL]MYSQL开启Bin-Log
    scrapy采集gb2312网页中文乱码笔记
    uTools 桌面软件。
    Asp.Net Core Grpc 入门实践
    ASP.NET Core 中间件(Middleware)(一)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/9949200.html
Copyright © 2011-2022 走看看