回家

点击跟博主一起玩(zuo)耍(si)
题目大意就是让你求某些点到定点的最短路。
最短路相信都不陌生,各种算法也耳熟能详。SPFA算法是解答这个题的最佳算法23333(不要打我)。
注意在这个题中是区分大小写的。也就是说m跟M代表的时两个牧场,这点是最为重要的。其次就是注意不一定所有的牧场都有奶牛,在读入时注意记录那些有奶牛那些没有,避免进行不必要的计算。
代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#define maxn 10000
#define inf 99999999
using namespace std;
struct edge
{
    int to,cost;
    }; 

    vector<edge>G[maxn];
    int turn (char a){
    int t=(int)a;
    if(t>=97)
    {
    t=t-71;
    return t;
    }
    else{
    t=t-65;
    return t;
    }
    }
    void addedge(int from,int to,int cost){
    G[from].push_back((edge){to,cost
    });
    G[to].push_back((edge){from,cost
    });
    }
    int dist[maxn];
    int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    char a,b;
    cin>>a>>b;
    int cost;
    cin>>cost;
    int from=turn(b);
    int to=turn(a);
    addedge(from,to,cost);
    }
    int s=turn('Z');
    bool inq [maxn];
    memset(inq ,0,sizeof(inq));
    queue<int>que;
    inq[s]=1;
    fill(dist,dist+72,inf);
    dist[s]=0;
    que.push(s);
    while(!que.empty())
    {
    int k=que.front();
    inq[k]=0;
    que.pop();
    for(int i=0;i<G[k].size();i++){
    edge &e=G[k][i];
    if(dist[e.to]>dist[k]+e.cost){
    dist[e.to]=dist[k]+e.cost;
    inq[e.to]=1;
    que.push(e.to);
    }
    }
    }
    int minn=inf ,mini;
    for(int i=0;i<25;i++){
    if(dist[i]<minn){
    minn=dist[i];
    mini=i;}
    }
    char c=(char)mini+65;
    cout<<c<<" "<<minn;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值