CodeForce20C
这是一个裸的最短路的模板题,但是它需要输出路径。
用dijkstra的话首先敲一个最短路的板子,其次开一个数组p[]来记录路径,但是怎么存呢?我们需要记录每一个点的前驱,因为如果记录后边的话,一个点可能连多个节点,但是每一个点的前驱只有一个点,所以记录每一个被压入堆的点即可,最后输出。如果用spfa的话,也同理存入被松弛的点。
1.一定要注意数据类型,long long 足以让你死掉,当然也要全部修改,注意全局这个变量的出现都要修改。
2.注意加边的时候是有向边还是无向边。
3.记录路径一定是p[i]=j代表从j->i的路径,所以输出要倒序。
代码
#include<bits/stdc++.h>
#define maxn 500005
#define maxm 500005
using namespace std;
struct edge{
int next;
long long w;
int v;
}e[maxm];
int n,m,tot=,s;
int head[maxn],vis[maxn],pos[maxn];
long long dis[maxn];
struct node{
long long w;
int now;
inline bool operator <(const node &x)const
{
return w>x.w;//这里注意符号要为'>'
}
};
inline void add(int u,int v,long long w){
e[++tot].next=head[u];
head[u]=tot;
e[tot].w=w;
e[tot].v=v;
}
priority_queue<node>q;
void dijkstra(){
for(int i=;i<=n;i++) {
dis[i]=;
}
dis[]=;
q.push((node){,});
while(!q.empty()){
node x=q.top();
int u=x.now;
q.pop();
if(vis[u]==) continue;
vis[u]=;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
q.push((node){dis[v],v});
pos[e[i].v]=u;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=,x,y,z;i<=m;i++){
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
dijkstra();
bool flag=false;
int num=;
int ans[maxn];
for(int i=n;i;i=pos[i]){
ans[++num]=i;
if(i==){
flag=true;
}
}
if(flag==true){
for(int i=num;i>=;i--){
cout<<ans[i]<<" ";
}
}
else cout<<-;
return ;
}
CodeForce20C的更多相关文章
随机推荐
- bootstrap列表组的使用
<ul class="list-group"> <li class="list-group-item"> <div class=& ...
- 使用wait/notify实现生产消费模型
public class A { private Deque<Integer> list = new LinkedList<>(); private int max = 10; ...
- Vue_(组件通讯)父组件向子组件传值
Vue组件 传送门 父组件向子组件传值:父组件通过属性向下传值的方式和子组件通信: 使用步骤: 1.定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件 2.准备获取数据:c ...
- JETSON TK1 ~ 安装Cuda和OpenCV3
一:安装Cuda6.5 1:下载安装包 Cuda6.5 2.在TK1上安装软件包: cd ~/Downloads sudo dpkg -i cuda-repo-l4t-r21.3-6-5-prod_6 ...
- How to correctly set application badge value in iOS 8?
o modify the badge under ios8 you have to ask for permissions let settings = UIUserNotificationSetti ...
- weblogic性能调优
1.设置java参数: a) 编辑Weblogic Server启动脚本文件: /user_projects/domains/Domain_jgbs/bin/startWebLogic.sh /use ...
- jstack+jdb命令查看线程及死锁堆栈信息
如果程序挂死,有时使用jstack查看进程中线程信息时,需要添加上-F参数,此时如果有死锁信息,则可能不会打印出死锁堆栈信息,使用jdb则可以查看当前死锁线程的运行堆栈. 如下模拟一个简单的死锁程序 ...
- AMBARI部署HADOOP集群(3)
1. 安装ambari-server yum -y install ambari-server 2. ambari server 需要一个数据库存储元数据,默认使用的 Postgres 数据库.默认的 ...
- Windows下Java JDK环境变量的配置
注意:前提是你已经在电脑上安装了JDK 1.打开控制面板—系统和安全—系统,选择高级系统设置 2.选择环境变量 3. 然后看看用户变量中有没有JAVA_HOME和CLASSPATH变量 4.新建JAV ...
- Odp.Net 连接Oracle
1.C#连接Oracle可以不安装客户端,但是需要借助Odp.net 免安装Oracle客户端: 将5个Oracle客户端的类库文件提取出来,放到程序根目录下,分别是oci.dll.Oracle.Da ...