当前位置: 首页 > news >正文

小R的烦恼 BZOJ3280

分析:

一开始一直Wa,发现是建图建错了,必须得拆点。

S连i,流量为a[i],费用为0,i+n连T,流量同上,费用为0,之后i连i+1费用为0,流量为inf,之后S连n*2+i,流量为li,费用为0,之后枚举j从1到n,n*2+i连接j+n,费用为p[i],之后i连接i+d[i]+1,费用为q[i],流量为inf,之后跑费用流就可以了。

附上代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
#define N 155
#define S 0
#define T 151
struct node
{
    int to,next,val,flow,from;
}e[N*200];
int head[N],cnt,dis[N],vis[N],from[N],ans,n,m,k;
void add(int x,int y,int z,int v)
{
    e[cnt].to=y,e[cnt].next=head[x],e[cnt].val=v;
    e[cnt].flow=z,e[cnt].from=x,head[x]=cnt++;
}
void insert(int x,int y,int z,int v)
{
    add(x,y,z,v);add(y,x,0,-v);
}
int spfa()
{
    memset(dis,0x3f,sizeof(dis));memset(from,-1,sizeof(from));
    queue <int>q;q.push(S);dis[S]=0;
    while(!q.empty())
    {
        int x=q.front();q.pop();vis[x]=0;
        for(int i=head[x];i!=-1;i=e[i].next)
        {
            int to1=e[i].to;
            if(e[i].flow&&dis[to1]>dis[x]+e[i].val)
            {
                from[to1]=i;
                dis[to1]=dis[x]+e[i].val;
                if(!vis[to1])vis[to1]=1,q.push(to1);
            }
        }
    }
    return dis[T]==0x3f3f3f3f?0:1;
}
void mcf()
{
    int x,i=from[T];
    while(i!=-1){x=min(e[i].flow,x);i=from[e[i].from];}
    i=from[T];
    while(i!=-1){e[i].flow-=x,e[i^1].flow+=x,ans+=x*e[i].val,i=from[e[i].from];}
    return ;
}
int a[N];
int main()
{
    int t;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++)
    {
        printf("Case %d: ",cas);
        int v=0;ans=0;
        memset(head,-1,sizeof(head));cnt=0;
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<n;i++)insert(i,i+1,1<<30,0);
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);a[i]=x;
            insert(S,i,x,0);
            insert(i+n,T,x,0);
        }
        for(int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            insert(S,2*n+i,x,0);
            for(int j=1;j<=n;j++)insert(2*n+i,j+n,x,y);
        }
        for(int i=1;i<=k;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            for(int j=1;j+x+1<=n;j++)
            {
                insert(j,j+n+x+1,1<<30,y);
            }
        }
        while(spfa())mcf();
        for(int i=head[T];i!=-1;i=e[i].next)
        {
            if(e[i^1].flow!=0)
            {
                v=1;
                puts("impossible");
                break;
            }
        }
        if(!v)printf("%d\n",ans);
    }
    return 0;
}

  

转载于:https://www.cnblogs.com/Winniechen/p/9118888.html

相关文章:

  • 捋一捋PHP第三方微信登录
  • JDK动态代理源码解析
  • 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS
  • 关于lncRNA数据收集
  • 在Java中使用tabula提取PDF中的表格数据
  • Kafka入门经典教程
  • 使用 Buildah 创建小体积的容器
  • Linux-office办公的另外之选
  • Service Mesh服务网格:8种方式简化微服务部署
  • 【Sensors】环境传感器(5)
  • Spring Data 之 Repository 接口
  • 完整性的约束
  • 前端小白入门区块链系列01
  • 关于Visual Studio 2019的前期详情
  • 【AudioVideo】音频应用概述(5)
  • @angular/forms 源码解析之双向绑定
  • android 一些 utils
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • dva中组件的懒加载
  • Magento 1.x 中文订单打印乱码
  • React-redux的原理以及使用
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue-router的history模式发布配置
  • 从零开始学习部署
  • 前端自动化解决方案
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)我也是一只IT小小鸟
  • .NET 5种线程安全集合
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 反射 Reflect
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net6+aspose.words导出word并转pdf
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net环境下的缓存技术介绍
  • .NET值类型变量“活”在哪?
  • /etc/sudoers (root权限管理)
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [Android]使用Retrofit进行网络请求
  • [Apio2012]dispatching 左偏树
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [CSS]文字旁边的竖线以及布局知识
  • [Gamma]阶段测试报告