题目连接

题意:

  没个位置有一个点权,每个边有一个边权,求对于每个点u的min(2*d(u,v)+val[v])(v可以等于u)

分析:

  我们想这样一个问题,从u到v的边权*2再加一个点权就完了,我们能不能把点权也变成边权,可以,直接和0连接就好了,这是从u到0的最短路(当然原先的边权要*2)就是要求的值.

  当然,也可以直接类似dij的贪心思想,把每个点的dis赋值为点权push进去然后更新就行了.其实是类似的算法.

  代码:

  

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=2e5+;
int vis[maxn];
long long dis[maxn];
struct E{
int to;
int next;
long long val;
}ed[maxn*];
int tot;
int head[maxn];
void J(int a,int b,long long c){
tot++;
ed[tot].to=b;
ed[tot].val=c;
ed[tot].next=head[a];
head[a]=tot;
}
struct Node{
long long dis;
int x;
friend bool operator < (Node a,Node b){
return a.dis>b.dis;
}
Node(int a,long long b){
x=a;
dis=b;
}
};
priority_queue<Node> qu;
int main(){
int n,m;
scanf("%lld%lld",&n,&m);
int js1,js2;
long long js3;
for(int i=;i<=m;i++){
scanf("%lld%lld%lld",&js1,&js2,&js3);
J(js1,js2,2ll*js3);
J(js2,js1,2ll*js3);
}
for(int i=;i<=n;i++){
scanf("%lld",&js3);
J(,i,js3);
}
memset(dis,0x3f,sizeof(dis));
dis[]=0ll;
qu.push(Node(,0ll));
while(!qu.empty()){
Node js=qu.top();
qu.pop();
if(vis[js.x])
continue;
vis[js.x]=;
for(int i=head[js.x];i;i=ed[i].next){
int to=ed[i].to;
long long di=js.dis+ed[i].val;
if(dis[to]>di){
dis[to]=di;
qu.push(Node(to,di));
}
}
}
for(int i=;i<=n;i++)
printf("%lld ",dis[i]);
return ;
}

最新文章

  1. store前台数据过滤
  2. 怎样记住Integer的最大值(有趣的思维和搞笑的回答)
  3. 【转】SVN的dump文件导入
  4. 经典实用jQuery soChange幻灯片实例演示
  5. Mysql 修改字段长度、修改列名、新增列
  6. 应用引擎BAE3.0(转)
  7. nagios&ndash;配置文件
  8. spoj 1436
  9. 阻止系统自动睡眠的小软件,附C#制作过程
  10. javascript基础(五)函数
  11. Python内置函数(60)——compile
  12. OCR识别
  13. PHP跨域jsonp方式
  14. WebService接口定义及调用
  15. python 常见异常
  16. 4.4 C++虚析构函数
  17. spring核心之AOP学习总结一
  18. SpringMVC -- 梗概--源码--贰--RestFul收参(了解) @PathVariable
  19. jenkins构建配置
  20. For update带来的思考

热门文章

  1. 汇编指令:push、pop
  2. 定时器+echarts运行时间太长导致内存溢出页面崩溃
  3. Windows安装多个python解释器
  4. (一)JDK安装和使用eclipse输出hello world
  5. uiautomatorviewer 截取手机屏幕报错
  6. Windows程序设计(1)
  7. MFC exe文件生成的图标更改方法
  8. c++ UDP套接字客服端代码示范
  9. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
  10. 解决github打不开问题