题意:要完成一个由s个子项目组成的项目,给b(b>=s)个部门分配,从而把b个部门分成s个组。分组完成后,每一组的任
意两个点之间都要传递信息。假设在(i,j)两个点间传送信息,要先把信息加密,然后快递员从i出发到总部,再加
密,在到j点。出于安全原因,每次只能携带一条消息。现在给出了道路网络、各个部门和总部的位置,请输出快
递员要走的最小总距离。
思路:求最短路dis,排序。 由排序不等式,dis相近的分到一组。 那么就是一个分组问题,可以用四边形不等式; 决策单调性DP; 二分+单调栈; 斜率优化。
#include<bits/stdc++.h>
#define s second
#define f first
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int inf=1e9;
const int maxn=;
int Laxt[maxn],Next[maxn],To[maxn],Len[maxn],cnt;
int a[maxn],b[maxn],c[maxn],dis[maxn],N,M,S,B,s[][];
ll dp[][],sum[];
pair<int,int>p[maxn]; int vis[maxn];
void read(int &x){
x=; char c=getchar();
while(c>''||c<'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
}
void add(int u,int v,int l)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt;
To[cnt]=v; Len[cnt]=l;
}
struct in{
int dis,u;
in(){}
in(int dd,int uu):dis(dd),u(uu){}
friend bool operator <(in w,in v){
return w.dis>v.dis;
}
};
void SPFA()
{
rep(i,,M) swap(a[i],b[i]);
cnt=; rep(i,,N) Laxt[i]=,vis[i]=,dis[i]=inf;
rep(i,,M) add(a[i],b[i],c[i]);
priority_queue<in>q; q.push(in(,B+)); dis[B+]=;
while(!q.empty()){
int u=q.top().u; q.pop(); vis[u]=;
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i];if(dis[v]>dis[u]+Len[i]){
dis[v]=dis[u]+Len[i];
if(!vis[v]) vis[v]=,q.push(in(dis[v],v));
}
}
}
}
int main()
{
while(~scanf("%d%d%d%d",&N,&B,&S,&M)){
rep(i,,M) read(a[i]),read(b[i]),read(c[i]);
SPFA();
rep(i,,B) p[i].s=i,p[i].f=dis[i];
SPFA();
rep(i,,B) p[i].f+=dis[i];
sort(p+,p+B+);
rep(i,,B) sum[i]=sum[i-]+p[i].f;
memset(s,,sizeof(s));
memset(dp,0x3f,sizeof(dp));
dp[][]=;
rep(k,,S) s[B+][k]=B;
rep(k,,S){
for(int i=B;i>=;i--) {
for(int j=s[i][k-];j<=s[i+][k]&&j<i;j++){
if(dp[i][k]>dp[j][k-]+1LL*(i-j-)*(sum[i]-sum[j])){
dp[i][k]=dp[j][k-]+1LL*(i-j-)*(sum[i]-sum[j]);
s[i][k]=j;
}
}
}
}
printf("%lld\n",dp[B][S]);
}
return ;
}
 

Gym-101242B:Branch Assignment(最短路,四边形不等式优化DP)的更多相关文章

  1. hdu 2829 Lawrence(四边形不等式优化dp)

    T. E. Lawrence was a controversial figure during World War I. He was a British officer who served in ...

  2. BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】

    题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...

  3. 【转】斜率优化DP和四边形不等式优化DP整理

    (自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...

  4. codevs3002石子归并3(四边形不等式优化dp)

    3002 石子归并 3 参考 http://it.dgzx.net/drkt/oszt/zltk/yxlw/dongtai3.htm  时间限制: 1 s  空间限制: 256000 KB  题目等级 ...

  5. CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性

    LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...

  6. HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)

    题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...

  7. 四边形不等式优化DP——石子合并问题 学习笔记

    好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...

  8. POJ 1160 四边形不等式优化DP Post Office

    d(i, j)表示用i个邮局覆盖前j个村庄所需的最小花费 则有状态转移方程:d(i, j) = min{ d(i-1, k) + w(k+1, j) } 其中w(i, j)的值是可以预处理出来的. 下 ...

  9. 新年趣事之红包--"四边形"不等式优化DP

    目录 题目描述 输入 输出 思路 新年趣事之红包 时间限制: 1 Sec  内存限制: 64 MB 题目描述 xiaomengxian一进门,发现外公.外婆.叔叔.阿姨--都坐在客厅里等着他呢.经过仔 ...

随机推荐

  1. 《Linux就该这么学》培训笔记_ch17_使用iSCSI服务部署网络存储

    <Linux就该这么学>培训笔记_ch17_使用iSCSI服务部署网络存储 文章最后会post上书本的笔记照片. 文章主要内容: iSCSI技术介绍 创建RAID磁盘阵列 配置iSCSI服 ...

  2. CUDA C编程入门

    最近想用cuda来加速三维重建的算法,就先入门了一下cuda. CUDA C 编程 cuda c时对c/c++进行拓展后形成的变种,兼容c/c++语法,文件类型为'.cu',编译器为nvcc.cuda ...

  3. xcode添加一个真机设备

    1.首先先安装Xcode并且运行Xcode,点击左角菜单Xcode -> Preferences:点击Accounts+号弹菜单点击Add Apple ID:弹框输入账号密码普通账号行需要发者账 ...

  4. Scala 函数式编程

    将函数赋值给变量 // Scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量 // Scala的语法规定,将函数赋值给变量时,必须在函数后面加上空格和下划线 def ...

  5. npm是干什么的(转)

    原文:https://zhuanlan.zhihu.com/p/24357770 网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话 ...

  6. MQTT和Coap

    什么是MQTT? MQTT是一个“发布和订阅”协议.用户可以订阅某些主题,或发布某些主题的消息.订阅者将收到订阅的主题消息.用户可以通过保证交付来配置协议更可靠. 什么是CoAP? CoAP看起来像是 ...

  7. switch/case/default中的雷区

    switch的语法如下: switch(表达式){ case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; - case常量表达式n: 语句n;break; def ...

  8. 2019 头条java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条等公司offer,岗位是Java后端开发,因为发展原因最终选择去了头条,入职一年时间了,也成为了面试官,之前面 ...

  9. Mybatis 映射器接口实现类的方式 运行过程debug分析

    查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 <?xml version="1.0" encoding= ...

  10. ReactiveObjC basic

    基础-> https://www.jianshu.com/p/cd4031fbf8ff 在RAC中,万物皆信号. RAC 指的就是 RactiveCocoa ,是 Github 的一个开源框架, ...