zoukankan      html  css  js  c++  java
  • Codeforces 938D Buy a Ticket

     Buy a Ticket

    题意要求:求出每个城市看演出的最小费用, 注意的一点就是车票要来回的。

    题解:dijkstra 生成优先队列的时候直接将在本地城市看演出的费用放入队列里, 然后直接跑就好了,  dis数组存的是, 当前情况下的最小花费是多少。

    代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 #include<queue>
     5 #include<vector>
     6 #include<algorithm>
     7 #include<cmath>
     8 #include<iomanip>
     9 #include<cstdio>
    10 #define LL long long
    11 #define ULL unsigned LL
    12 #define lson l,m,rt<<1
    13 #define rson m+1,r,rt<<1|1
    14 #define fi first
    15 #define se second
    16 using namespace std;
    17 typedef pair<LL, int> pll;
    18 const int N = 2e5+5;
    19 LL dis[N];
    20 int head[N];
    21 struct Node{
    22     int to;
    23     int nt;
    24     LL ct;
    25 }e[N<<1];
    26 priority_queue<pll, vector<pll>, greater<pll> > q;
    27 void dijkstra(){
    28     while(!q.empty()){
    29         int u = q.top().se;
    30         LL w = q.top().fi;
    31         q.pop();
    32         if(dis[u] != w) continue;
    33         for(int i = head[u]; ~i; i = e[i].nt){
    34             int v = e[i].to;
    35             if(dis[v] > dis[u] + e[i].ct){
    36                 dis[v] = dis[u] + e[i].ct;
    37                 q.push(pll(dis[v],v));
    38             }
    39         }
    40     }
    41 }
    42 int tot = 0;
    43 void add(int u, int v, LL w){
    44     e[tot].ct = w;
    45     e[tot].to = v;
    46     e[tot].nt = head[u];
    47     head[u] = tot++;
    48 }
    49 int main(){
    50     ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    51     memset(head, -1, sizeof(head));
    52     int n, m;
    53     cin >> n >> m;
    54     int u, v;
    55     LL ct;
    56     for(int i = 1; i <= m; i++){
    57         cin >> u >> v >> ct;
    58         add(u,v,ct*2);
    59         add(v,u,ct*2);
    60     }
    61     for(int i = 1; i <= n; i++){
    62         cin >> ct;
    63         q.push(pll(ct,i));
    64         dis[i] = ct;
    65     }
    66     dijkstra();
    67     for(int i = 1; i < n; i++){
    68         cout << dis[i] << ' ';
    69     }
    70     cout << dis[n] << endl;
    71     return 0;
    72 }
  • 相关阅读:
    UART协议
    芯片时钟体系(take example as s3c2440)
    PCIe协议
    I2C协议
    SPI协议
    嵌入式相关术语列表
    TreeView控件数据绑定之:数据库数据递归绑定
    连接SQL Server 数据库的三种方式
    JS小功能之:五角星评论
    MVC学习之开发技巧总结(1)
  • 原文地址:https://www.cnblogs.com/MingSD/p/8494955.html
Copyright © 2011-2022 走看看