美文网首页
L2-001 紧急救援

L2-001 紧急救援

作者: Mr_Vetr | 来源:发表于2018-12-16 02:06 被阅读0次
#include<bits/stdc++.h>
using namespace std;
const int N = 500+5;
int aid[N];
bool flag[N];
int mind[N];
int path[N];
int cnt[N];
int num[N];
typedef pair<int,int> pii;
vector<pii> graph[N];
vector<int> U,V,W;
priority_queue<pii,vector<pii>,greater<pii> > pq;
void getAnswer(int n, int m,int s,int t){
    memset(mind,127,sizeof(mind));
    memset(flag,0,sizeof(flag));
    memset(path,-1,sizeof(path));
    while(!pq.empty())
            pq.pop();
    for(int i =0 ; i<=n; ++i)
            graph[i].clear();
    for(int i=0; i<m; ++i){
        graph[U[i]].push_back(make_pair(V[i],W[i]));
        graph[V[i]].push_back(make_pair(U[i],W[i]));
    }
    mind[s] = 0;
    num[s] = 1;
    cnt[s] = aid[s];
    pq.push(make_pair(mind[s],s));
    while(!flag[t]){
        int u = pq.top().second;
        pq.pop();
        if(!flag[u]){
            flag[u] = true;
            for(auto it = graph[u].begin(); it != graph[u].end(); ++it){
                int v = it->first;
                int w = it->second;
               if(mind[u] +  w  < mind[v]){
                    num[v] = num[u];
                    mind[v] = mind[u] + w;
                    cnt[v] = cnt[u] + aid[v];
                    path[v] = u;
                    pq.push(make_pair(mind[v],v));
               }else if ( mind[u] + w == mind[v]){
                   if(cnt[v]  < cnt[u] + aid[v]){
                        cnt[v] = cnt[u] + aid[v];
                        path[v] = u;
                   }
                   num[v] += num[u];
               }
            }
        }
    }

}
void dfs(int s,int v){
    if(v == s)
        printf("%d",s);
    else{
        dfs(s,path[v]);
        printf(" %d",v);
    }
}
int main()
{
    int n,m,s,t;
    cin>>n>>m>>s>>t;
    for(int i=0; i<n; ++i)
        cin>>aid[i];
    for(int i=0;i<m;++i){
        int u,v,w;
        cin>>u>>v>>w;
        U.push_back(u);
        V.push_back(v);
        W.push_back(w);
    }
    getAnswer(n,m,s,t);
    printf("%d %d\n",num[t],cnt[t]);
    //dfs(s,t);
    stack<int> sta;
    sta.push(t);
    while(sta.top() != s){
        sta.push(path[sta.top()]);
    }
    //cout<<num[t]<<" "<<cnt[t]<<endl;
    int flag = 1;
    while(!sta.empty()){
        if(flag){
            cout<<sta.top();
            flag =  0;
            sta.pop();
        }else{
            cout<<" "<<sta.top();
            sta.pop();

        }
    }
    //for(int i=0;i <n; ++i)
        //cout<<path[i]<<endl;

    return 0;



}

真是万事开头难。

相关文章

  • L2-001 紧急救援

    真是万事开头难。

  • 有小情而无大爱——《紧急救援》

    今天聊聊电影《紧急救援》。 片名 The Rescue(2020)。 《紧急救援》表现的主体是交通海上应急反应特勤...

  • 紧急救援

    今天早上,刚下过一阵小雨,空气好清新。小红车吃完早饭高高兴兴的出门了,他要到他姥姥家去玩,姥姥家在离着二...

  • 紧急救援

    这天的阳光别样的好,像天鹅绒毛一般的柔软,温暖,它无疑是冬日里大自然给予的最好的馈赠。和往常一样,小朋友们来到了户...

  • 紧急救援

    刚刚经历了惊心动魄的半小时紧急救援。现在我的手还在颤抖着。 刚吃过晚饭。还没来得及洗碗。就听到楼上邻居一片大声吵闹...

  • 紧急救援

    星期二就考试了……我们还带孩子出来看电影,出来玩一天。是的,我是一名贪玩,把吃喝玩乐付诸行动的妈妈。不会因任何事情...

  • 紧急救援!

    文丨薇安(原创) 《紧急救援》是由林超贤执导,由彭于晏、王彦林、辛芷蕾 、蓝盈莹领衔主演,王雨甜、徐洋、李敏成、刘...

  • 紧急救援

    钻井平台 治疗机长 绞车荡势 神兵天降 火浪冲天起 命悬井塔顶 螺旋转乾坤 恐惧突来袭 坚持焕醒幸运 奋斗点燃激情...

  • 《紧急救援》

    今年看电影的次数确实少了,已经想不起上一次看电影是什么时候了。 今天偷闲带着家人一起去看了《紧急救援》。期待了很久...

  • 《紧急救援》

    此电影通过倾覆沉没的钻井平台,顺流直冲的运油车头,直坠入海的满载客机三个小故事呈现出在危急时刻不惜牺牲自己,也...

网友评论

      本文标题:L2-001 紧急救援

      本文链接:https://www.haomeiwen.com/subject/zuazhqtx.html