牛客小白月赛10 D-饥饿

题目描述

夕阳西下,匆匆忙忙间,SSJ一天的课程已经全部上完了,肚子咕咕开始叫了,坐上回家的公交车,可是SSJ今天好像有点迷,据说今中午吃饭时没去食堂,走着走着,外边景色好美啊,啊?我好像没走过这,完了,我好想迷路了。
公交车到了终点站,SSJ下车了,内心无比紧张,回不去了,一阵冷风吹过,瑟瑟发抖,emm...,那是一张地图?地图上有啥大家都明白,SSJ现在已经饿得无力思考了,请你帮他设计一条最快回家的路下,他要快点回家吃xxx。

输入描述:

第一行四个数n,m,s,t。(分别表示有地图上n个地点,m条道路,SSJ在s处,他家在t处)第2-m+1三个正整数,f,u(某条路起点),v(到达点),w(路径距离)。(f为1或0,0表示这条道路上有恶狗拦路,SSJ已无力与恶狗打斗了,所以他要避开这些道路,1表示此条道路无危险)。

输出描述:

第一行一个数表示最短路径长度,若无法回家输出“My gold!!!”(无引号)若可以回家.

思路:裸的dijkstra,由于边比较多,可以用链式前向星+堆优化dijkstra模板。

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define ll long long
#define mem(ar,num) memset(ar,num,sizeof(ar))
#define me(ar) memset(ar,0,sizeof(ar))
#define lowbit(x) (x&(-x))
#define IOS ios::sync_with_stdio(false)
#define DEBUG cout<<endl<<"DEBUG"<<endl;
using namespace std;
const int MaxN = 100010, MaxM = 200000*2+5;
int head[MaxN], dis[MaxN], cnt,f,a,b,c;
bool vis[MaxN];
int n,m,s,t;
struct edge{
    int to, dis, next;
}e[MaxM];
void add(int u, int v, int d){
    e[++cnt].dis = d;
    e[cnt].to = v;
    e[cnt].next = head[u];
    head[u] = cnt;
}
struct node{
    int dis;
    int pos;
    bool operator <( const node &x )const{
        return x.dis < dis;
    }
};
priority_queue<node> q;
void dijkstra(){
    dis[s]=0;
    q.push((node){0,s});
    while(!q.empty()){
        node tmp = q.top();
        q.pop();
        int x = tmp.pos, d = tmp.dis;
        if(vis[x])
            continue;
        vis[x] = 1;
        int t=head[x];
        while(t){
            int y=e[t].to;
            if(dis[y] > dis[x] + e[t].dis){
                dis[y] = dis[x] + e[t].dis;
                if(!vis[y]){
                    q.push((node){dis[y],y});
                }
            }
            t=e[t].next;
        }
    }
}
int main(){IOS;
    cin>>n>>m>>s>>t;//地图上n个地点,m条道路,SSJ在s处,他家在t处
    memset(dis,0x3f,sizeof dis);
    for(int i=0;i<m;i++){
        cin>>f>>a>>b>>c;
        if(f){
            add(a,b,c);
            add(b,a,c);
        }
    }
    dijkstra();
    if(dis[t]==INF){
        cout<<"My gold"<<endl;
    }else cout<<dis[t];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Endeavor_G/article/details/85224217
今日推荐