cf 20C Dijkstra?

带队列  dijkstra

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <queue>
 4 #include <vector>
 5 #include<memory.h>
 6 #include<algorithm>//reverse
 7 using namespace std;
 8 #define maxn 100002
 9 #define INF 65
10 struct node
11 {
12     int u;
13     int w;
14     node(long long x,long long y)
15     {
16         u = x;
17         w = y;
18     }
19     bool operator < ( const node& p ) const
20     {      return w > p.w;   }
21 };
22 vector<long long>g[maxn];
23 vector<long long>cost[maxn];
24 long long d[maxn];
25 long long par[maxn];
26 int dijk(int n)
27 {
28     memset(d, INF, sizeof(d));
29     memset(par, -1, sizeof(par));
30     priority_queue<node>q;
31     q.push(node(1,0));
32     d[1]=0;
33     while(!q.empty())
34     {
35         node top = q.top();
36         q.pop();
37         int uu = top.u;
38         if(uu == n) return d[n];
39         for(int i = 0;i < g[uu].size(); i++)
40         {
41             int v = g[uu][i];
42             if(d[uu] + cost[uu][i] < d[v])
43             {
44                 d[v] = d[uu] + cost[uu][i];
45                 par[v] = uu;
46                 q.push(node(v,d[v]));
47             }
48         }
49     }
50     return -1;
51 }
52 int main()
53 {
54     //freopen("input.txt","r",stdin);
55     int n,e,u,v;
56     long long w;
57     cin>>n>>e;
58     for(int i = 0; i < e; i++)
59     {
60         cin>>u>>v>>w;
61         g[u].push_back(v);cost[u].push_back(w);
62         g[v].push_back(u);cost[v].push_back(w);
63
64     }
65     w = dijk(n);
66     if(w == -1) cout<<"-1"<<endl;
67     else
68     {
69         int t = n;
70         int s[maxn];
71         int k = 0;
72         while(t != -1)
73         {
74             s[k++] = t;
75             t = par[t];
76         }
77         for(int j = k - 1; j >= 0; j--)
78             cout<<s[j]<<" ";
79         cout<<endl;
80     }
81 }

cf 20C Dijkstra?,布布扣,bubuko.com

时间: 2024-10-06 00:16:13

cf 20C Dijkstra?的相关文章

CodeForces 【20C】Dijkstra?

解题思路 heap+Dijkstra就能过.注意边是双向边,要用long long. 附上代码 #include <iostream> #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef pair<long long, int> P; priority_queue<P, ve

[CF787D]遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)

Problem 遗产 题目大意 给出一个带权有向图,有三种操作: 1.u->v添加一条权值为w的边 2.区间[l,r]->v添加权值为w的边 3.v->区间[l,r]添加权值为w的边 求st点到每个点的最短路 Solution 首先我们思考到,若是每次对于l,r区间内的每一个点都执行一次加边操作,不仅耗时还耗空间. 那么我们要想到一个办法去优化它.一看到lr区间,我们就会想到线段树对吧. 没错啦这题就是用线段树去优化它. 首先我们建一棵线段树,然后很容易想到,我们只需要把这一棵线段树当做

【CF 507E】Breaking Good

[CF 507E]Breaking Good 双条件最短路 每个路有已搭建和未搭建两种状态 需要把经过的路都建起 为经过的路都拆掉 优先经过最少条路 同样少的路走改动(搭建+拆掉)最小的 最短路跑完后把最短的路上的路径标记一下 bfs输出拆除和搭建 在最短路径上的路 未建的搭建 不在的建好的拆掉 通过此题试了一下spfa的一个小优化还有dijkstra的优先队列优化 不过别看spfa加优化快了点 前两天做了个专门卡这个优化的题--想方设法让他多跑就是..HDOJ 4889 有兴趣的可以去瞅瞅 此

#HDU 3790 最短路径问题 【Dijkstra入门题】

题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 19767????Accepted Submission(s): 5880 Problem Description 给你n个点.m条无向边,每条边都有长度d和花费p.给你起点s终点t,要求输出起点到终点的最短距离及其花费,假设最短距离有多条路线,则输出花费最少的. ?

堆优化dijkstra+set优化dijkstra

...好尴尬啊 我一直以为堆优化是nlogm的,,,甚至还狠狠嘲讽过哪些认为是mlogm的. 上次在cf上被卡了之后才知道自己的dijkstra一直是是写错的. 这次补上正确的模板.... 然后又了解到了set优化dijkstra,是nlogn的,很优秀. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int inf=6205; 4 int n,m,s,t; 5 int tot,fi[inf],nxt[inf<<1

cf自训4.10

cf933A dp题 一开始看错是连续子序列了,然后样例刚好能过.. 然后正解没想出来,网上看了题解:感觉正解是枚举2开始的位置,然后再枚举翻转的区间,pos左右两侧分别求出贡献最大的那个区间,左右两部分的贡献是独立计算的 #include <cstdio> #include <cmath> #include <queue> #include <cstring> #include <algorithm> using namespace std;

微信 {&quot;errcode&quot;:40029,&quot;errmsg&quot;:&quot;invalid code, hints: [ req_id: Cf.y.a0389s108 ]&quot;}

{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"} 问题:微信网页授权后,获取到 openid 了,一刷新又没了 微信网页授权获取到的 code 只能使用一次(5分钟内有效),使用一次后,马上失效. 页面授权跳转成功,根据 code 也换取到 openid 了. 此时刷新页面,并不会再次进行授权,而是直接刷新了一下上一次授权跳转后的链接,带的还是

畅通project续HDU杭电1874【dijkstra算法 || SPFA】

http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择,而某些方案要比还有一些方案行走的距离要短非常多.这让行人非常困扰. 如今,已知起点和终点,请你计算出要从起点到终点.最短须要行走多少距离. Input 本题目包括多组数据.请处理到文件结束. 每组数据第一行包括两个正

Choose the best route 【Dijkstra】

Problem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her friend's home as soon as possible . Now give you a map of the city's traffic route, and the stations which are near Kiki