POJ 3013 Dijkstra
来源:互联网 发布:网络投资平台排名 编辑:程序博客网 时间:2024/04/28 23:15
从1节点最短路,,然后再乘一下权值就OK了
//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 132000long long d[N];int n,m,first[N],next[N],v[N],w[N],tot,a[N],xx,yy,zz,cases;bool vis[N];struct Node{int now,weight;}jy;void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}bool operator < (Node a,Node b){return a.weight>b.weight;}void Dijkstra(){ priority_queue<Node>pq; memset(d,0x3f,sizeof(d)),memset(vis,0,sizeof(vis)),d[1]=0; jy.now=1,jy.weight=0;pq.push(jy); while(!pq.empty()){ Node t=pq.top();pq.pop(); if(!vis[t.now])vis[t.now]=1; else continue; for(int i=first[t.now];~i;i=next[i]) if(!vis[v[i]]&&d[v[i]]>d[t.now]+w[i]){ d[v[i]]=d[t.now]+w[i]; jy.now=v[i],jy.weight=d[v[i]]; pq.push(jy); } } long long ans=0; for(int i=1;i<=n;i++) if(d[i]>0x3ffffffff){puts("No Answer");return;} else ans+=d[i]*a[i]; printf("%lld\n",ans);}signed main(){ scanf("%d",&cases); while(cases--){ tot=0;memset(first,-1,sizeof(first)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=m;i++){ scanf("%d%d%d",&xx,&yy,&zz); add(yy,xx,zz),add(xx,yy,zz); } Dijkstra(); }}
0 0
- POJ 3013 Dijkstra
- Dijkstra POJ
- POJ 3013 Big Christmas Tree(Dijkstra,裸)
- POJ 3013 Big Christmas Tree(Dijkstra)
- poj 3159 heap+dijkstra
- poj 2253 - Frogger --- dijkstra
- poj 3268 dijkstra
- POJ 1847 Dijkstra应用
- poj 1847(Tram) Dijkstra
- poj 2253 : Frogger (dijkstra)
- poj 1125 dijkstra
- POJ 3268 dijkstra算法
- POJ 1502 dijkstra()
- POJ 1797 dijkstra()变形
- dijkstra-poj-2263
- POJ 1125 暴力+Dijkstra
- POJ 2502 Dijkstra
- poj 2387 dijkstra
- java标识符
- javascript对DOM操作实例之联动菜单
- 适配器优化写法
- [Python]python之xlwt模块列宽width、行高Heights详解
- C++ Notes-Inheritance-06
- POJ 3013 Dijkstra
- Android中的shape
- 如何自定义View视图控件案例开发(一)
- javascript对DOM操作实例之购物车
- 父进程是init一定不会变僵尸进程吗?
- linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置
- linux初级和初中级常用命令
- Linux系统常用指令、管道、find 文件查找指令
- Leetcode Path Sum II