codevs 1079 回家(最短路)

来源:互联网 发布:深圳市橙子网络 编辑:程序博客网 时间:2024/05/21 10:06

题目描述 Description
现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为’a’..’z’和’A’..’Y’,在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是’Z’,注意没有母牛在谷仓中。
注意’m’和’M’不是同一个牧场否则错误上面的意思是说:输入数据中可能会同时存在M,m(郁闷ing),比如
M a a m m z

输入描述 Input Description
第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。
第 2 ..P+1行: 用空格分开的两个字母和一个整数:
被道路连接牧场的标记和道路的长度(1<=长度<=1000)。

输出描述 Output Description
单独的一行包含二个项目:最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。

样例输入 Sample Input
5
A d 6
B d 3
C e 9
d Z 8
e Z 3

样例输出 Sample Output
B 11

题解:一道裸的最短路,就是读入太恶心╭(╯^╰)╮

代码如下

#include<queue>#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int MAXN=10100;int first[MAXN],nxt[MAXN<<1],d[MAXN];int n,minn=0x7fffffff,tot;bool used[MAXN];struct edge{    int from,to,cost;}es[MAXN<<1];void init(){    memset(first,-1,sizeof(first));    memset(d,63,sizeof(d));    tot=0;}void build(int f,int t,int d){    es[++tot]=(edge){f,t,d};    nxt[tot]=first[f];    first[f]=tot;}queue<int> Q;void spfa(int s){    d[s]=0;    Q.push(s);    used[s]=1;    while(!Q.empty())    {        int u=Q.front();        Q.pop();        used[u]=0;        for(int i=first[u];i!=-1;i=nxt[i])        {            int v=es[i].to;            if(d[v]>d[u]+es[i].cost)            {                d[v]=d[u]+es[i].cost;                if(!used[v])                {                    Q.push(v);                    used[v]=1;                }            }        }    }}int main(){    char num;    scanf("%d",&n);    init();    for(int i=1;i<=n;i++)    {        char c1,c2;        int ff,tt,dd;        cin>>c1>>c2>>dd;        if(c1<=90) ff=c1-64;        else ff=c1-70;        if(c2<=90) tt=c2-64;        else tt=c2-70;//把读入的字符变成对应的整数         build(ff,tt,dd);        build(tt,ff,dd);    }    spfa(26);//从终点跑最短路     for(int i=1;i<=25;i++)        if(d[i]<minn&&i!=26)        {            num=i;            minn=d[i];//找最小值         }    cout<<(char)(num+64)<<" "<<minn<<endl;    return 0;}
3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 山药弄胳膊上痒怎么办 手碰山药很痒怎么办 手摸了山药很痒怎么办 手切了山药很痒怎么办 山药弄的身上痒怎么办 疣迪去除疣体怎么办 尖锐湿庞出血了怎么办 尿道口周围烂了怎么办 尖锐湿庞复发了怎么办 宝宝脸上长湿疹怎么办如何治疗 孕妇得尖锐湿庞怎么办 痘痘留下的小坑怎么办 花洒固定座坏了怎么办 脚上起水泡烂了怎么办 月经期吃了芒果怎么办 月经量少又黑怎么办 来月经黑色的血怎么办 月经来的是黑色怎么办 来月经有血块是怎么办 月经又少又黑怎么办 来月经发黑又少怎么办 月经血发黑量少怎么办 做人流后肚子胀怎么办 怀孕见红了肚子不痛怎么办 月经来是黑色的怎么办 怀孕了长了痔疮怎么办 怀孕了有外痔疮怎么办 孕妇长痔疮很痛怎么办 孕9个月尿路感染怎么办 旁边有人尿不出来怎么办 外阴破皮了应该怎么办 脸上长脂肪粒怎么办怎么能消除 挤黑头留下的坑怎么办 长痘留下的坑怎么办 鼻子上留下黑印怎么办 狗狗眼里长息肉怎么办 狗狗眼角长息肉怎么办 脸上长了好多脂肪粒怎么办 脸上毛孔粗大有黑头怎么办 脸颊毛孔粗有黑头怎么办 鼻子上有黑头怎么办小窍门