题目链接:

[TJOI2019]大中锋的游乐场

题目本质要求的还是最短路,但因为有第二维权值(汽水看成$+1$,汉堡看成$-1$)的限制,我们在最短路的基础上加上一维$f[i][j]$表示到达$i$节点,权值为$j$的最短路长度,然后像正常最短路那样转移,最后取终点所有状态的最小值即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct lty
{
int val,node,num;
lty(int a,int b,int c){val=a,node=b,num=c;}
};
bool operator <(lty x,lty y){return x.val>y.val;}
int f[10010][30];
int head[10010];
int val[200010];
int v[10010];
int to[200010];
int next[200010];
int n,m,k;
int T;
int tot;
int a,b;
int x,y,z;
int vis[10010][30];
priority_queue<lty>q;
void add(int x,int y,int z)
{
next[++tot]=head[x];
head[x]=tot;
to[tot]=y;
val[tot]=z;
}
void init()
{
memset(vis,0,sizeof(vis));
memset(head,0,sizeof(head));
tot=0;
}
void dijkstra(int S,int T)
{
for(int i=1;i<=n;i++)
{
for(int j=0;j<=2*k;j++)
{
f[i][j]=1<<30;
}
}
f[S][k+v[S]]=0;
q.push(lty(f[S][k+v[S]],S,k+v[S]));
while(!q.empty())
{
lty now=q.top();
q.pop();
if(vis[now.node][now.num])
{
continue;
}
vis[now.node][now.num]=1;
for(int i=head[now.node];i;i=next[i])
{
if(now.num+v[to[i]]<0||now.num+v[to[i]]>2*k)continue;
if(f[to[i]][now.num+v[to[i]]]>f[now.node][now.num]+val[i])
{
f[to[i]][now.num+v[to[i]]]=f[now.node][now.num]+val[i];
q.push(lty(f[to[i]][now.num+v[to[i]]],to[i],now.num+v[to[i]]));
}
}
}
int ans=1<<30;
for(int i=0;i<=2*k;i++)
{
ans=min(ans,f[T][i]);
}
printf("%d",ans==(1<<30)?-1:ans);
}
void solve()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
if(v[i]==2)
{
v[i]=-1;
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
scanf("%d%d",&a,&b);
dijkstra(a,b);
}
int main()
{
scanf("%d",&T);
while(T--)
{
init();
solve();
}
}

最新文章

  1. BAE log服务的配置(nodejs)
  2. OneProxy的功能与限制
  3. opencv中的.at方法
  4. [转]不正当使用HashMap导致cpu 100%的问题追究
  5. [Xamarin] 使用LayoutInflater.Inflate載入預先設計好的Layout並使用 (转帖)
  6. FlyCapture2 VS2010 Configuration
  7. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
  8. c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]
  9. C++异常:no matching function for call to &quot;Matrix(Matrix&amp;)&quot;
  10. ajax调用服务的基本格式
  11. aliyun云服务器硬件性能测试
  12. ueditor asp.net版本更改图片保存路径
  13. uva 11673 Garbage Remembering Exam (概率)
  14. js深入研究之无法理解的js类代码,extend扩展
  15. 几个SQL语句(备忘)
  16. day6(列表操作、列表练习题)
  17. 阿里,百度面试90%会问的Java面试题
  18. Oracle NVL空值处理函数
  19. Install jdk on Ubuntu16
  20. 廖雪峰Java4反射与范型-3范型-1什么是泛型

热门文章

  1. mysql 系统变量
  2. chrome网页中打开exe
  3. Dijkstra算法正确性证明
  4. vue组件中的data与methods
  5. 前端HTML基础和head部分
  6. Centos7.x固定网络IP配置
  7. springboot整合freemarker模板引擎后在页面获取basePath绝对路径
  8. Hive窗口函数案例详解
  9. 使用 IDEA 打包spring cloud 成 jar在ubuntu 中运行
  10. 003_硬件基础电路_LM2596