zoukankan      html  css  js  c++  java
  • [CF938D] Buy a Ticket

    (n) 个城市开演唱会,这 (n) 个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜(去回都要路费)

    Solution

    设演唱会为 (0) 号点

    连边 (0 o i),对于一对可达的城市,连边 (u leftrightarrow v)

    跑最短路即可

    #include <bits/stdc++.h>
    using namespace std;
    #define reset3f(x) memset(x,0x3f,sizeof x)
    #define int long long
    namespace sp {
    const int N=1e+6+5;
    vector<pair<int,int> > g[N];
    int n,v0=1,d[N];
    void make(int t1,int t2,int t3) {
        g[t1].push_back(make_pair(t2,t3));
    }
    void reset_graph() {
        for(int i=0;i<=n;i++) g[i].clear();
    }
    void solve() {
        priority_queue<pair<int,int> > qu;
        reset3f(d);
        d[v0]=0;
        qu.push(make_pair(0,v0));
        while(qu.size()) {
            int p=qu.top().second,r=qu.top().first;
            qu.pop();
            if(r+d[p]) continue;
            for(int i=0;i<g[p].size();i++) {
                int q=g[p][i].first,w=g[p][i].second;
                if(d[q]>d[p]+w) {
                    d[q]=d[p]+w;
                    qu.push(make_pair(-d[q],q));
                }
            }
        }
    }
    }
    
    int n,m,t1,t2,t3;
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>m;
        for(int i=1;i<=m;i++) {
            cin>>t1>>t2>>t3;
            t3*=2;
            sp::make(t1,t2,t3);
            sp::make(t2,t1,t3);
        }
        for(int i=1;i<=n;i++) {
            cin>>t1;
            sp::make(0,i,t1);
        }
        sp::v0=0;
        sp::solve();
        for(int i=1;i<=n;i++) cout<<sp::d[i]<<" ";
    }
    
  • 相关阅读:
    markdown图片设置
    编程变量名
    c++ 子类构造函数初始化及父类构造初始化
    idea中解决Git反复输入代码的问题
    idea中修改git提交代码的用户名
    网络相关
    idea Controller层编译Mapper层报错
    java7与java8的新特性
    修改列名以及其数据类型
    修改数据库表的某个字段默认值
  • 原文地址:https://www.cnblogs.com/mollnn/p/12587111.html
Copyright © 2011-2022 走看看