zoukankan      html  css  js  c++  java
  • POJ-1062 昂贵的聘礼 (最短路)

    POJ-1062 昂贵的聘礼:http://poj.org/problem?id=1062

    题意:

      有一个人要到1号点花费最少的钱,他可以花费一号点对应的价格,也可以先买下其他一些点,使得费用降低。

    思路:

      这个题目的转化比较巧妙,由于每个点都可以由一些点转移过来,有可能降低了到这个点的费用。于是就想到了建图跑最短路。我的建图思路是,n个点能转移的都连起来,然后再设n+1为原点,连向每一个点,费用为直接和这个点交易的价格。当然这道题还有一个限制,就是一条路上交易的人的等级不能超过M,那我们可以枚举每一个等级,设这个等级为最低点,跑n次dji最短路即可。

    #include <algorithm>
    #include  <iterator>
    #include  <iostream>
    #include   <cstring>
    #include   <cstdlib>
    #include   <iomanip>
    #include    <bitset>
    #include    <cctype>
    #include    <cstdio>
    #include    <string>
    #include    <vector>
    #include     <stack>
    #include     <cmath>
    #include     <queue>
    #include      <list>
    #include       <map>
    #include       <set>
    #include   <cassert>
    using namespace std;
    //#pragma GCC optimize(3)
    //#pragma comment(linker, "/STACK:102400000,102400000")  //c++
    #define lson (l , mid , rt << 1)
    #define rson (mid + 1 , r , rt << 1 | 1)
    #define debug(x) cerr << #x << " = " << x << "
    ";
    #define pb push_back
    #define pq priority_queue
    
    
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    typedef pair<ll ,ll > pll;
    typedef pair<int ,int > pii;
    typedef pair<int,pii> p3;
    
    //priority_queue<int> q;//这是一个大根堆q
    //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
    #define fi first
    #define se second
    //#define endl '
    '
    
    #define OKC ios::sync_with_stdio(false);cin.tie(0)
    #define FT(A,B,C) for(int A=B;A <= C;++A)  //用来压行
    #define REP(i , j , k)  for(int i = j ; i <  k ; ++i)
    //priority_queue<int ,vector<int>, greater<int> >que;
    
    const ll mos = 0x7FFFFFFF;  //2147483647
    const ll nmos = 0x80000000;  //-2147483648
    const int inf = 0x3f3f3f3f;       
    const ll inff = 0x3f3f3f3f3f3f3f3f; //18
    const int mod = 1e9+7;
    const double esp = 1e-8;
    const double PI=acos(-1.0);
    
    
    
    template<typename T>
    inline T read(T&x){
        x=0;int f=0;char ch=getchar();
        while (ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar();
        while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
        return x=f?-x:x;
    }
    
    
    /*-----------------------showtime----------------------*/
                const int maxn = 109;
                int d[maxn],dis[maxn];
                int m,n;
                vector<pii>mp[maxn];
    
                void dji(){
                    memset(dis,inf,sizeof(dis));
                    priority_queue<pii>que;
                    dis[n+1] = 0;
                    que.push(pii(0,n+1));
                    while(!que.empty()){
                        pii tmp = que.top();que.pop();
                        int u = tmp.se;
    
                        if(dis[u] < -1*tmp.fi)continue;
                        
                        for(int i=0; i<mp[u].size(); i++){
                            int v = mp[u][i].fi;
    
                            if( d[v] >= d[n+1] && d[v] <= d[n+1] + m &&dis[v] > dis[u] + mp[u][i].se){
                                dis[v] = dis[u] + mp[u][i].se;
                                que.push(pii(-dis[v], v));
                            }
                        }
                    }
    
                }
    int main(){
                
                scanf("%d%d", &m, &n);
                for(int i=1; i<=n; i++){
                    int c,x;
                    scanf("%d%d%d", &c, &d[i], &x);
                    mp[n+1].pb(pii(i,c));
                    for(int j=1; j<=x; j++){
                        int id,v;
                        scanf("%d%d", &id, &v);
                        mp[id].pb(pii(i,v));
                    }
                }
                int ans = inf;
                for(int i=1; i<=n; i++){
                    d[n+1] = d[i];
                    dji();    
                    ans = min(ans, dis[1]);
                }
                printf("%d
    ", ans);
                return 0;
    }
    POJ 1062
  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/9596538.html
Copyright © 2011-2022 走看看