博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3013 Big Christmas Tree 最短路 dijkstra算法
阅读量:4704 次
发布时间:2019-06-10

本文共 1412 字,大约阅读时间需要 4 分钟。

题意:每个顶点有一个权值,求构造一个图,使得 ∑(每个点的权值)X(到1结点的距离) 最小

方法:dijkstra+heap

昨晚写了一个,不知道为什么TLE,怎么改都TLE。今天重写一遍AC了

#include
#include
#include
using namespace std;#define MAXN 50005#define MAXM 100005#define INF 10000000000int edge_cnt;int val[MAXN];int first[MAXN];struct edge_node{ int to,weight,next;}edges[MAXM];inline void addedge(int f,int t,int dis){ ++edge_cnt; edges[edge_cnt].to=f; edges[edge_cnt].weight=dis; edges[edge_cnt].next=first[t]; first[t]=edge_cnt; ++edge_cnt; edges[edge_cnt].to=t; edges[edge_cnt].weight=dis; edges[edge_cnt].next=first[f]; first[f]=edge_cnt;}struct Node{ int point,dist; bool operator<(const Node x) const { return x.dist
Que; Node tmp,inq; tmp.point=1;tmp.dist=0; for(int i=0;i<=n;i++) dis[i]=INF; dis[1]=0; Que.push(tmp); int u,v,e; while(!Que.empty()) { tmp=Que.top();Que.pop(); u=tmp.point; if(done[u]) continue; done[u]=true; for(e=first[u];e;e=edges[e].next) { v=edges[e].to; if(!done[v]&&dis[v]>dis[u]+edges[e].weight) { dis[v]=dis[u]+edges[e].weight; inq.dist=dis[v]; inq.point=v; Que.push(inq); } } }}int main(){ int T; scanf("%d",&T); while(T--) { edge_cnt=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&val[i]); int tmpf,tmpt,tmpd; memset(first,0,sizeof(first)); for(int i=0;i

  

转载于:https://www.cnblogs.com/laputa/archive/2012/05/05/2484516.html

你可能感兴趣的文章
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
adb shell am 的用法
查看>>
iOS10 UI教程视图和子视图的可见性
查看>>
FindChildControl与FindComponent
查看>>
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>
一点小基础
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
Linux IO模式及 select、poll、epoll详解
查看>>
Log4j知识汇总
查看>>
python生成.exe文件
查看>>
PHP面向对象(OOP)----分页类
查看>>
监听SD卡状态
查看>>