【题目背景】
公元215年,刘备取益州,孙权令诸葛瑾找刘备索要荆州。刘备不答应,孙权极为恼恨,便派吕蒙率军取长沙、零陵、桂阳三郡。长沙、桂阳蜀将当即投降。刘备得知后,亲自从成都赶到公安(今湖北公安),派大将关羽争夺三郡。孙权也随即进驻陆口,派鲁肃屯兵益阳,抵挡关羽。双方剑拔弩张,孙刘联盟面临破裂,在这紧要关头,鲁肃为了维护孙刘联盟,不给曹操可乘之机,决定当面和关羽商谈。“肃邀羽相见,各驻兵马百步上,但诸将军单刀俱会”。双方经过会谈,缓和了紧张局势。随后,孙权与刘备商定平分荆州,“割湘水为界,于是罢军”,孙刘联盟因此能继续维持。
 
【问题描述】

关羽受鲁肃邀请,为了大局,他决定冒险赴会。他带着侍从周仓,义子关平,骑着赤兔马,手持青龙偃月刀,从军营出发了,这就是历史上赫赫有名的“单刀赴会”。关羽平时因为军务繁重,决定在这次出行中拜访几个多日不见的好朋友。然而局势紧张,这次出行要在限定时间内完成,关公希望你能够帮助他安排一下行程,安排一种出行方式,使得从军营出发,到达鲁肃处赴会再回来,同时拜访到尽可能多的朋友,在满足这些条件下行程最短。注意拜访朋友可以在赴会之前,也可以在赴会之后。现在给出地图,请你完成接下来的任务。

我们发现k非常的小,这种问题是经典的状压DP,又因为是无环图,所以可以用dijk先算出每个关键点到其他点的距离,再调用TSP问题的方法即可

(这里说一下:dijk+heap很好写,信不信比你的spfa还短,而且可以在负权图上面跑!但是效率会下降很多)

#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
struct Node{ int d,id; } x;
struct Edge{ int v,c,nt; } G[100010];
int h[10010],d[20][10010],d2[20][20];
int n,m,k,t,cnt=0,w[20],f[20][1<<18];
inline bool gmin(int& a,int b){ return a>b?(a=b)|1:0; }
inline bool operator < (Node a,Node b){ return a.d>b.d; }
inline int tot(int s,int c=0){ for(;s;s^=s&-s) ++c; return c; }
inline void adj(int x,int y,int c){ G[++cnt]=(Edge){y,c,h[x]}; h[x]=cnt; }
void dijk(int* d,int s){priority_queue<Node> q;d[s]=0; q.push((Node){0,s});for(int u;!q.empty();){x=q.top(); q.pop();if(d[u=x.id]<x.d) continue;for(int v,i=h[u];i;i=G[i].nt)if(gmin(d[v=G[i].v],d[u]+G[i].c)) q.push((Node){d[v],v});}
}
int main(){scanf("%d%d%d%d",&n,&m,&k,&t);for(int x,y,c;m--;){scanf("%d%d%d",&x,&y,&c);adj(x,y,c); adj(y,x,c);}memset(d,63,sizeof d);memset(f,63,sizeof f);w[0]=1; w[++k]=n;dijk(d[0],1); dijk(d[k],n);for(int i=1;i<k;++i){scanf("%d",w+i);dijk(d[i],w[i]);for(int j=0;j<i;++j) d2[i][j]=d2[j][i]=d[i][w[j]];}for(int j=0;j<k;++j){d2[k][j]=d2[j][k]=d[k][w[j]];f[j][1<<j]=d2[0][j];}for(int S=0;S<(1<<k+1);++S)for(int i=0;i<=k;++i)if(S&(1<<i))for(int j=0;j<=k;++j)if(i!=j&&(S&(1<<j)))f[i][S]=min(f[i][S],f[j][S-(1<<i)]+d2[j][i]);int Mx=-1,Ml=0;for(int S=1<<k;S<(1<<k+1);++S)if((S&(1<<k))&&(S&1)){int c=tot(S)-2,v=1<<30;if(c>=Mx){for(int j=0;j<=k;++j)v=min(v,f[j][S]+d2[0][j]);if(v<=t){if(Mx==c) gmin(Ml,v);else Ml=v; Mx=c;}}}if(~Mx) printf("%d %d",Mx,Ml); else puts("-1");
}

转载于:https://www.cnblogs.com/Extended-Ash/p/7774391.html

Jzoj3907 蜀传之单刀赴会(梦回三国系列)相关推荐

  1. 魏传之长坂逆袭、蜀传之单刀赴会、吴传之火烧连营

    A.魏传之长坂逆袭 时间限制: 1 Sec  内存限制: 128 MB 题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁.占有荆益.成就霸业. ...

  2. YYHS-蜀传之单刀赴会(梦回三国系列T2)(最短路+状压dp)

    题目描述 [题目背景] 公元215年,刘备取益州,孙权令诸葛瑾找刘备索要荆州.刘备不答应,孙权极为恼恨,便派吕蒙率军取长沙.零陵.桂阳三郡.长沙.桂阳蜀将当即投降.刘备得知后,亲自从成都赶到公安(今湖 ...

  3. YYHS-吴传之火烧连营(梦回三国系列T3)(trie树)

    题目描述 [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势.蜀军远征,补给困难,又不能速战速决,加上入夏以后天气炎热,以致 ...

  4. Jzoj3908 吴传之火烧连营 (梦回三国系列)

    [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势.蜀军远征,补给困难,又不能速战速决,加上入夏以后天气炎热,以致锐气渐失, ...

  5. YYHS-魏传之长坂逆袭(梦回三国系列T1)

    题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁.占有荆益.成就霸业.而曹操则在赤壁一败后再起不能,终生无力南下. 建安二十五年(220年), ...

  6. 使用WIFI模块与MQTT服务器进行透传数据通讯(M0E1系列)

    使用WIFI模块与百度天工进行透传数据通讯(M0E1系列) 前言 具体步骤 进入AT指令模式 配置相应的AT指令 使用MQTT.fx进行测试 MQTT控制模块引脚功能 说明 前言 M0E1系列模组,是 ...

  7. 小米usb测试软件,你还在用USB传文件?小米10系列USB详细测试——《小米10十大槽点》番外 图文版...

    你还在用USB传文件?小米10系列USB详细测试--<小米10十大槽点>番外 图文版 2020-06-13 22:03:29 1点赞 1收藏 0评论 创作立场声明:给大家科普一下传文件的技 ...

  8. 吞食天地2刘蜀传攻略

    攻略只限于 吞食天地2刘蜀传1.8 版本 (英才版攻略 | 猛将版攻略) 一.武将特技介绍 骁武:物理攻击1.75倍 猛将:必定暴击 连环:火.水.石计两次攻击 脱兔:闪避率上升 智术:火.水.石计策 ...

  9. 使用WIFI模块与阿里云物联网套件进行透传数据通讯(M0E1系列)

    使用WIFI模块与阿里云物联网套件进行透传数据通讯(M0E1系列) 前言 具体步骤 进入AT指令模式 配置相应的AT指令 简单测试 阿里去物联网套件控制模块引脚功能 说明 前言 M0E1系列模组,是基 ...

最新文章

  1. PyTorch学习笔记——pytorch图像处理(transforms)
  2. 杀手级AI补代码工具问世,支持23种语言、5种主流编辑器!(附链接)
  3. IBM携手天健“漫步”区域医疗信息化市场
  4. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结
  5. Greenplum,HAWQ interval parser带来的问题 - TPCH 测试注意啦
  6. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机体系结构/并行与分布计算/存储系统
  7. jetbrains是最好的编译器系列
  8. VS环境下的makefile编译
  9. 远程过程调用(Remote Procedure Call,RPC)
  10. jQuery 1.4单独为某个动画动作设效果
  11. Redis数据类型--散列类型
  12. win8计算机背景黑色,Win8电脑桌面背景突然变黑怎么办?
  13. 贝叶斯网络分析kaggle泰坦尼克号数据
  14. python 基础一
  15. MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错!
  16. android studio的旅游APP的开发和设计
  17. 【Proteus仿真】51单片机在线版电子锁案例
  18. 结合泛函极值_(二) 泛函的极值
  19. 多多评价怎么显示第一个_拼多多商品质量分哪里看?怎么看评分?
  20. 你知道互联网行业哪些岗位需求量最大?什么职位最赚钱?

热门文章

  1. crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式
  2. 刘涵 美国 西北大学 计算机,西北大学关于表彰2010-2011学年度学生先进集体-红帆.doc...
  3. idea在mac版怎么配置svn_使用Mac自带svn搭建服务器,并使用idea进行连接
  4. 网站核心关键词一定要控制在五个之内更方便集中优化
  5. 百度蜘蛛动态网页ajax,百度SEO优化百度蜘蛛可读内容
  6. java removeto_java.util.LinkedList.remove(int index)方法实例
  7. Kotlin学习 PART 3:类,对象和接口
  8. packettotal.com - PacketTotal - A Free Online PCAP Analysis Engine
  9. bazel编译tensorflow 生成libtensorflow_inference.so 和 libandroid_tensorflow_inference_java.jar
  10. 长尾关键词挖掘工具和使用方法