hdu 6437 Problem L.Videos (最小费用最大流)

博客围绕节目观看快乐值问题展开,已知一天有N小时、m个节目、k个人,连续看同类型节目扣w快乐值,每个节目有播放区间,看完获快乐值。解题思路是将电影拆点,建源点、汇点和次源点,把求最大费用转化为求最小费用。

http://acm.hdu.edu.cn/showproblem.php?pid=6437

 

题意:

一天有N个小时,有m个节目(每种节目都有类型),有k个人,连续看相同类型的节目会扣w快乐值

每一种节目有都一个播放区间[s,t]。每个人同一时间只能看一个节目,看完可以获得快乐值。问最多可以获得多少快乐?

思路:

我们可以将每部电影拆成两个点来看,建立源点和汇点,还有次源点,因为要求的是最大费用,这样我们可以把费用变成负数,这样就是求最小费用,最后变成正数就是最大费用了。

 

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int inf=0x7fffffff;
struct edge
{
    int from,to,cap,flow,cost;
    edge(int u,int v,int c,int f,int co):
        from(u),to(v),cap(c),flow(f),cost(co) {};
};
struct node
{
    int s,t,w,op;
}a[maxn];
int n,s,t,m,K,W;
vector<int>g[maxn];
vector<edge>e;
void addedge(int u,int v,int c,int cost)
{
    e.push_back(edge(u,v,c,0,cost));
    e.push_back(edge(v,u,0,0,-cost));
    int zz=e.size();
    g[u].push_back(zz-2);
    g[v].push_back(zz-1);
}
int cost;
void init(int N)
{
    cost=0;
    for(int i=0; i<=N; i++)
    {
        g[i].clear();
    }
    e.clear();
}
int dis[maxn],pre[maxn],vis[maxn];
bool spfa()
{
    queue<int>q;
    for(int i=0; i<=t; i++)dis[i]=inf,pre[i]=0;
    dis[s]=0;
    memset(vis,0,sizeof(vis));
    vis[s]=1;
    q.push(s);
    int a=inf;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=0;
        for(int i=0; i<g[u].size(); i++)
        {
            edge f=e[g[u][i]];
            if(f.cap>f.flow&&dis[f.to]>dis[u]+f.cost)
            {
                dis[f.to]=dis[u]+f.cost;
                pre[f.to]=g[u][i];
                a=min(a,f.cap-f.flow);
                if(!vis[f.to])
                {
                    vis[f.to]=1;
                    q.push(f.to);
                }
            }
        }
    }
    if(dis[t]==inf)return 0;
    int u=t;
    cost+=dis[t]*a;
    while(u!=s)
    {
        e[pre[u]].flow+=a;
        e[pre[u]^1].flow-=a;
        u=e[pre[u]].from;
    }
    return 1;
}
void mincost()
{
    while(spfa())
    {
        continue;
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d%d",&n,&m,&K,&W);
        init(2*m+2);
        addedge(0,2*m+1,K,0);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d%d",&a[i].s,&a[i].t,&a[i].w,&a[i].op);
            addedge(i,i+m,1,-a[i].w);
            addedge(i+m,2*m+2,1,0);
            addedge(2*m+1,i,1,0);
        }
        s=0,t=2*m+2;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(i==j)continue;
                if(a[i].t<=a[j].s)
                {
                    addedge(i+m,j,1,(a[i].op == a[j].op ? W : 0));
                }
            }
        }
        mincost();
        printf("%d\n",-cost);
    }

    return 0;
}

 

(1)求职者端(Web 前端) 岗位浏览与搜索: 智能推荐首页:基于 “专业背景 + 求职意向” 推荐匹配岗位(如 “计算机专业硕士” 优先推荐 “高校计算机教师岗”“实验员岗”),展示岗位核心信息(学校名称、岗位名称、薪资范围、截止日期)。 多条件筛选:支持按 “岗位类型(教学岗 / 科研岗 / 行政岗)、学历要求(硕士 / 博士)、地区(华北 / 华东等)、学校层次(985/211 / 双非)” 组合筛选,结果按 “匹配度 / 发布时间 / 薪资” 排序。 岗位详情页:展示 “岗位职责、任职要求、福利待遇、应聘流程、联系人信息”,提供 “收藏岗位、一键投递简历、查看该岗位竞争热度(如‘已有 230 人投递’)” 功能。 个人求职中心: 简历管理:支持创建多版本简历(如 “教学岗专用简历”“科研岗专用简历”),包含 “基本信息、教育经历、科研成果、教学经验、获奖情况” 等模块,支持 PDF 导出和在线编辑。 应聘跟踪:记录 “已投递岗位、简历状态(已接收 / 筛选中 / 面试通知 / 已录用)、截止日期提醒”,对 “3 天内即将截止的岗位” 自动推送提醒。 竞争分析:针对已投递岗位,展示 “求职者学历分布(博士占比 75%)、专业匹配度排名(你的匹配度 85 分,超过 80% 竞争者)”,辅助评估自身竞争力。 (2)高校招聘负责人端(Web 管理端) 岗位管理: 岗位发布:填写 “岗位名称、招聘人数、学历要求、专业方向、岗位职责、薪资范围、应聘方式” 等信息,支持上传 “岗位说明书附件”,设置 “自动截止日期” 和 “简历接收邮箱”。 批量操作:对 “已过期岗位” 进行批量下架,对 “热门岗位(投递量>100)” 设置 “自动置顶”,支持 “岗位信息批量导出(Excel 格式)”。 简历筛选: 智能初筛:系统自动对投递简历进行 “匹配度评分”
(1)车主移动端(以微信小程序为例) 首页核心功能: 附近停车场推荐:基于手机 GPS 定位,展示 3 公里内停车场的 “剩余车位数量、距离、收费标准、用户评分”,支持按 “距离最近 / 车位最多 / 价格最低” 排序,点击可导航至停车场(对接高德 / 百度地图 API)。 预约车位:选择目标停车场与预计入场时间(如 “15:00-16:00”),预约成功后生成 “预约凭证”,系统为预约车位预留 15 分钟(超时未入场自动释放),避免 “到店无位”。 快捷缴费入口:支持 “扫码缴费”(扫描停车场出口二维码)或 “无感支付”(绑定微信 / 支付宝免密支付,离场时自动扣费),缴费后生成 “离场凭证”,出口闸机自动识别放行。 个人中心功能: 停车记录:展示近 3 个月的 “停车场名称、入场时间、离场时间、停车时长、缴费金额、支付状态”,支持按时间筛选,点击记录可申请电子发票(填写抬头后自动发送至邮箱)。 车辆管理:支持绑定 1-3 辆常用车辆(录入车牌号码、车辆类型如 “小型轿车 / SUV”),绑定后入场时无需重复扫码,系统自动识别车牌关联车主账号。 (2)管理员 Web 端 实时监控面板: 车位状态总览:以 “停车场平面图” 形式展示所有车位(红色 = 已占用、绿色 = 空闲、黄色 = 预约中),点击单个车位可查看 “当前占用车辆的车牌、入场时间、预计离场时间”。 异常告警提示:实时弹窗提示 “识别失败(如车牌模糊)”“超时未缴费”“车位占用异常(如车辆停留超 24 小时)”,管理员可点击处理(如手动输入车牌、联系车主)。 运营管理功能: 费率配置:支持按 “时段(如白天 8:00-20:00 / 夜间 20:00-8:00)、车型(小型车 / 大型车)、节假日” 设置差异化费率(如 “白天 5 元 / 小时,夜间 3 元 / 小时,节假日上浮 20%”),配置后实时生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值