传送门

要求经过路径汉堡的点和可乐的点个数之差绝对值\(\le k\),所以可以考虑dp,\(f_{i,j}\)表示到点\(i\),汉堡的点个数减可乐的点的个数为\(j\)的最短距离,注意一下负下标处理,然后跑个dij就完事了

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cmath>
  8. #include<ctime>
  9. #include<queue>
  10. #include<map>
  11. #include<set>
  12. #define LL long long
  13. #define db double
  14. using namespace std;
  15. const int N=1e4+10,M=1e5+10,mod=998244353;
  16. int rd()
  17. {
  18. int x=0,w=1;char ch=0;
  19. while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
  20. while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  21. return x*w;
  22. }
  23. int to[M<<1],nt[M<<1],w[M<<1],hd[N],tot;
  24. void add(int x,int y,int z)
  25. {
  26. ++tot,to[tot]=y,nt[tot]=hd[x],w[tot]=z,hd[x]=tot;
  27. ++tot,to[tot]=x,nt[tot]=hd[y],w[tot]=z,hd[y]=tot;
  28. }
  29. int n,m,kk,a[N];
  30. LL di[N][21];
  31. struct node
  32. {
  33. int x,k;
  34. LL d;
  35. bool operator < (const node &bb) const {return d>bb.d;}
  36. };
  37. priority_queue<node> q;
  38. int main()
  39. {
  40. int T=rd();
  41. while(T--)
  42. {
  43. n=rd(),m=rd(),kk=rd();
  44. for(int i=1;i<=n;++i) a[i]=rd()&1?-1:1;
  45. memset(hd,0,sizeof(hd)),tot=1;
  46. while(m--)
  47. {
  48. int x=rd(),y=rd(),z=rd();
  49. add(x,y,z);
  50. }
  51. memset(di,0x3f,sizeof(di));
  52. int ps=rd(),pt=rd();
  53. if(kk+a[ps]>=0&&kk+a[ps]<=kk+kk)
  54. q.push((node){ps,kk+a[ps],di[ps][kk+a[ps]]=0});
  55. while(!q.empty())
  56. {
  57. int x=q.top().x,k=q.top().k;
  58. LL d=q.top().d;
  59. q.pop();
  60. if(d>di[x][k]) continue;
  61. for(int i=hd[x];i;i=nt[i])
  62. {
  63. int y=to[i],nk=k+a[y];
  64. if(nk>=0&&nk<=kk+kk&&di[y][nk]>di[x][k]+w[i])
  65. q.push((node){y,nk,di[y][nk]=di[x][k]+w[i]});
  66. }
  67. }
  68. LL ans=1ll<<50;
  69. for(int i=0;i<=kk+kk;++i) ans=min(ans,di[pt][i]);
  70. ans<(1ll<<50)?printf("%lld\n",ans):puts("-1");
  71. }
  72. return 0;
  73. }

luogu P5340 [TJOI2019]大中锋的游乐场的更多相关文章

  1. 【题解】Luogu P5340 [TJOI2019]大中锋的游乐场

    原题传送门 没想到省选也会出这种题??! 实际就是一个带有限制的最短路 因为\(k<=10\),所以我们珂以暴力将每个点的权值分为[-k,k],为了方便我们珂以转化成[0,2k],将汉堡的权值记 ...

  2. [洛谷P5340][TJOI2019]大中锋的游乐场

    题目大意:有$n(n\leqslant10^4)$个点,$m(m\leqslant10^5)$条边的无向图,每个点有一个属性$A/B$,要求$|cnt_A-cnt_B|\leqslant k(k\le ...

  3. [TJOI2019]大中锋的游乐场——最短路+DP

    题目链接: [TJOI2019]大中锋的游乐场 题目本质要求的还是最短路,但因为有第二维权值(汽水看成$+1$,汉堡看成$-1$)的限制,我们在最短路的基础上加上一维$f[i][j]$表示到达$i$节 ...

  4. 「TJOI2019」大中锋的游乐场

    题目链接 问题分析 比较明显的最短路模型.需要堆优化的dij.建图的时候注意细节就好. 参考程序 #include <bits/stdc++.h> #define LL long long ...

  5. [bzoj5511]大中锋的游乐场

    记可乐为1,汉堡为-1,即求过程中绝对值不超过k的最短路. 然后发现k的范围仅为10,也就是说过程中合法的值仅有21种,因此跑一遍dij或spfa(嘿嘿嘿)即可. 1 #include<bits ...

  6. [TJOI2019]甲苯先生和大中锋的字符串——后缀自动机+差分

    题目链接: [TJOI2019]甲苯先生和大中锋的字符串 对原串建后缀自动机并维护$parent$树上每个点的子树大小,显然子树大小为$k$的节点所代表的子串出现过$k$次,那么我们需要将$[len[ ...

  7. 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...

  8. luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    传送门 考虑子串以及出现个数,可以发现SAM可以快速知道每种子串的出现次数,即所在状态的\(endpos\)集合大小,然后一个状态对应的子串长度是一段连续区间,所以可以对每个状态差分一下,就能统计答案 ...

  9. 【题解】Luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题传送门 实际按照题意模拟就行 我们先求出字符串的sa 因为要在字符串中出现k次,所以我们枚举\(l,r(r-l+1=k)\)看一共有多少种合法的方案 合法方案的长度下界\(lb\)为\(Max(h ...

随机推荐

  1. Android应用系列:仿MIUI的Toast动画效果实现

    前言 相信有些人用过MIUI,会发现小米的Toast跟Android传统的Toast特么是不一样的,他会从底部向上飞入,然后渐变消失.看起来效果是挺不错的,但是对于Android原生Toast是不支持 ...

  2. 4.Python IDLE使用方法详解(包含常用快捷键)

    在安装 Python 后,会自动安装一个 IDLE,它是一个 Python Shell (可以在打开的 IDLE 窗口的标题栏上看到),程序开发人员可以利用 Python Shell 与 Python ...

  3. cin.clear()、cin.sync()

    看机器学习时,发现之前学的C++代码忘了,cin.clear().cin.sync() cin.clear():将流中的所有状态值都重设为有效值 cin.sync():清空流 这个很有意思,如果没有c ...

  4. 《Effective Java》读书笔记 - 8.通用编程

    Chapter 8 General Programming Item 45: Minimize the scope of local variables local variables应该在他们要被用 ...

  5. async await task.Result 卡死

    在如下代码中: public async Task<string> GetData() { return await DoWork(); } 在UI线程中调用 var data = Get ...

  6. SetWindowsHookEx失败

    使用下面代码hook鼠标 res = SetWindowsHookEx(WH_MOUSE_LL, _mouseHookProcedure, Marshal.GetHINSTANCE(System.Re ...

  7. Factory Kit【其他模式】

    Factory Kit public class FactoryKit { /** * Factory Kit:它定义了一个包含不可变内容的工厂,并使用独立的构建器和工厂接口来处理对象的创建. */ ...

  8. node_modules .bin文件夹下的文件

    node_modues/.bin文件夹下,对于一个npm包,有两个可执行文件,没有后缀名的是是对应unix系的shell脚本,.cmd文件对应的是windows bat脚本,内容都是用node执行一个 ...

  9. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建

    创建实体类,实现Serializable接口 属性名和数据库的字段名保持一致 Date字段需要导入包 生成gettter和setter,再生成一个ToString的方法 创建持久层Dao 创建接口 里 ...

  10. 【命令汇总】Windows 应急响应

    日期:2019-06-07 16:11:49 作者:Bay0net 介绍:Windows 应急响应.取证及溯源相关内容学习记录 0x00.前言 常见的应急分类: web入侵:网页挂马.主页篡改.Web ...