写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个;

香甜的奶油:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define LL long long
const int maxn=;
const int inf=;
int d[maxn],vis[maxn],n,m,p,b[maxn];
struct node{
int y,next,v;
}e[];
int linkk[maxn],len=;
void insert(int x,int y,int v){
e[++len].y=y;
e[len].next=linkk[x];
linkk[x]=len;
e[len].v=v;
}
typedef pair<int,int> pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
int dij(int s){
while(!q.empty())q.pop();
q.push(make_pair(,s));
memset(d,,sizeof(vis));d[s]=;
memset(vis,,sizeof(vis));
while(!q.empty()){
int v=q.top().first;
int x=q.top().second;
q.pop();
vis[x]=;
for(int i=linkk[x];i;i=e[i].next){
if(vis[e[i].y])continue;
if(d[e[i].y]>v+e[i].v){
d[e[i].y]=v+e[i].v;
q.push(make_pair(d[e[i].y],e[i].y));
}
}
}
int ans=;
for(int i=;i<=n;i++)ans+=d[b[i]];
return ans;
}
void init(){
scanf("%d%d%d",&n,&p,&m);//cow,muchang,daolu
for(int i=;i<=n;i++)scanf("%d",&b[i]);
int x,y,v;
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&v);
insert(x,y,v);insert(y,x,v);
}
}
void work(){
int minn=inf;
for(int i=;i<=p;i++)minn=min(minn,dij(i));
cout<<minn<<endl;
}
int main(){
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
init();
work();
}

最后的结果是这种情况下的dij跑得比spfa慢不少;

当然可能是我用了stl,常数太大;

spfa和堆优化dij的唯一区别是一个用队列,需要多次迭代找出最优(也可能直接就找到最优值),一个用堆,可以直接找到一个不确定的点的最优值,但由于用了堆,复杂度要乘一个log;

其他的基本一样的;

spfa稀疏图好用,dij稠密图好用,上面的那道题就是个例子;

最新文章

  1. html5移动web开发笔记(一)Web 存储
  2. Redis 64 steps
  3. Android 仿土巴兔选择效果
  4. linux 命令集
  5. seeting菜单界面形成--优化
  6. CloudStack全局参数
  7. 【POJ】【1704】Georgia and Bob
  8. java中path和classpath
  9. WF学习笔记(四)
  10. poj2393
  11. WPF从我炫系列4---装饰控件的用法
  12. spring,hibernate配置事务 beans.xml
  13. BFS学习 Codeforces 301_div.2_Ice Cave
  14. (转载) ASP.NET(C#) Web Api 通过文件流下载文件到本地实例
  15. .Karma+Jasmine+karma-coverage
  16. less用法小结
  17. PHP删除数组中空值的方法介绍
  18. ssm又乱码
  19. python实现线性规划
  20. 在使用 #import &lt;objc/message.h&gt;时 xcode 报 :Too many arguments to function call, expected 0 , have * 解决方法

热门文章

  1. [原创][FPGA]Quartus中调用Modelsim波形仿真步骤说明
  2. luogu P1018 乘积最大
  3. DELPHI10.2的LINUX数据库开发环境配置
  4. scrapy 启动失败,scrapy startproject test 出错 &#39;module&#39; object has no attribute &#39;OP_NO_TLSv1_1
  5. Hibernate操作Blob数据
  6. CD_Lulu软件著作权中软件分类号
  7. 关于在 C#中无法静态库引用的解决方法
  8. Effective Go(官方文档)笔记
  9. Name和:Name
  10. CentOSyum操作