zoukankan      html  css  js  c++  java
  • 最小化代价(优先队列)

    链接:https://www.nowcoder.com/acm/contest/112/A

    现有n组人,m个地点,给出每组人的人数,每个地点可容纳的最大人数和选择的价格
    要求一种方式,使得每组人都到一个各不相同的地点,最小化选择的价格
    每个队伍的人都要在同一个地方每个地方只能有一个队伍

    输入描述:

    第一行n,m
    第二行n个数,表示每组的人数
    接下来m行,每行两个数,表示可容纳的最大人数和选择的价格

    输出描述:

    输出最小化选择的价格,无解输出-1
    示例1

    输入

    3 4
    2 3 4
    1 2
    2 3
    3 4
    4 5

    输出

    12

    备注:

    所有数据小于1e5
    从大到小判断就可以了。
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <cstdlib>
    #include <iomanip>
    #include <cmath>
    #include <cassert>
    #include <ctime>
    #include <map>
    #include <set>
    using namespace std;
    #pragma comment(linker, "/stck:1024000000,1024000000")
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>=y?x:y)
    #define min(x,y) (x<=y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define pi acos(-1.0)
    #define ei exp(1)
    #define PI 3.1415926535897932384626433832
    #define ios() ios::sync_with_stdio(true)
    #define INF 0x3f3f3f3f
    #define mem(a) ((a,0,sizeof(a)))
    typedef long long ll;
    vector<int>v[100005];
    int a[100006];
    priority_queue<int,vector<int>,greater<int> >q;
    int n,m,x,y,cnt=0,ans=0;
    int main()
    {
        scanf("%d%d",&n,&m);
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++)
        {
            scanf("%d",&x);
            a[x]++;
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&x,&y);
            v[x].push_back(y);
        }
        for(int i=100000;i>=1;i--)
        {
            for(int j=0;j<v[i].size();j++)
                q.push(v[i][j]);
            while(!q.empty() && a[i]>0)
            {
                int u=q.top();
                ans+=u;
                q.pop();
                cnt++;
                a[i]--;
            }
        }
        if(cnt>=n) printf("%d
    ",ans);
        else printf("-1
    ");
        return 0;
    }
  • 相关阅读:
    vs2008生成的各种文件
    spider_keeper
    scrapyd 参考(https://www.jianshu.com/p/2a189127901a)
    Django之ORM操作
    ES6 快速入门
    vue 数据(data)赋值问题
    vue嵌套路由-query传递参数(三)
    Vue页面加载时,触发某个函数的方法
    vue从一个页面跳转到另一个页面并携带参数
    单选框radio总结(获取值、设置默认选中值、样式)
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/9026729.html
Copyright © 2011-2022 走看看