日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Bessie Come Home回家

題目大意:

有n條路連接著一些牧場,每個牧場由‘a-z’(沒羊)和‘A-Y’(有一頭羊),問哪個有羊的牧場離‘Z’最近

INPUT FORMAT

第 1 行: 整數 P(1<= P<=10000),表示連接牧場(谷倉)的道路的數目。

第 2 …P+1行: 用空格分開的兩個字母和一個整數:

被道路連接牧場的標記和道路的長度(1<=長度<=1000)。

SAMPLE INPUT

5

A d 6

B d 3

C e 9

d Z 8

e Z 3

OUTPUT FORMAT

單獨的一行包含二個項目:

最先到達谷倉的母牛所在的牧場的標記,和這只母牛走過的路徑的長度。

SAMPLE OUTPUT

B 11

解題思路:

首先字符先進行一些操作變成數字,然后用SPFA,求出最短路,然后從有羊的牧場中選離‘Z’最近的牧場,然后再轉換成字符,再輸出,還要輸出他的距離

#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; int h,now,w,g,ans,n,x,y,c[60],b[60],head[60],p[60]; char st,st1; struct rec {int to,l,next; }f[20005]; int main() {scanf("%d",&n);for (int i=1;i<=n;i++){cin>>st>>st1;if (st>='a'&&st<='z') x=st-'a'+1;//小寫else {x=st-'A'+27;//大寫c[x]=1;//記錄}if (st1>='a'&&st1<='z') y=st1-'a'+1;else {y=st1-'A'+27;c[y]=1;}scanf("%d",&g);f[++w].to=y;//去向f[w].l=g;//距離f[w].next=head[x];//下一條線head[x]=w;//x點的第一條線f[++w].to=x;f[w].l=g;f[w].next=head[y];head[y]=w;}memset(b,127/3,sizeof(b));//預處理queue<int>d; d.push(52);//入隊p[52]=1;//記錄b[52]=0;//預處理while(!d.empty())//結束沒{now=d.front();//去出頭元素d.pop();//出隊for (int i=head[now];i;i=f[i].next)//連接此點的每一條線if (b[now]+f[i].l<b[f[i].to])//判斷是否更優{b[f[i].to]=b[now]+f[i].l;//代替if(!p[f[i].to])//判斷是否在隊列內{d.push(f[i].to);//入隊p[f[i].to]=1;//記錄}}p[now]=0;//清空}ans=2147483647;//預處理for(int i=1;i<52;++i)//每一個牧場if (c[i]&&b[i]<ans)//有沒有羊,是否更優{ans=b[i];//代替h=i;//記錄}if (h<=26) putchar('a'+h-1);//弄回字符else putchar('A'+h-27);printf(" %d",ans);//輸出 }

總結

以上是生活随笔為你收集整理的【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。