洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 亂搞

題目描述

現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向谷倉走去。 你的工作是要指出哪只母牛會最先到達谷倉(在給出的測試數據中,總會有且只有一只最快的母牛)。 在擠奶的時候(晚餐前),每只母牛都在她自己的牧場上,一些牧場上可能沒有母牛。 每個牧場由一條條道路和一個或多個牧場連接(可能包括自己)。 有時,兩個牧場(可能是字母相同的)之間會有超過一條道路相連。 至少有一個牧場和谷倉之間有道路連接。 因此,所有的母牛最后都能到達谷倉,并且母牛總是走最短的路徑。 當然,母牛能向著任意一方向前進,并且她們以相同的速度前進。 牧場被標記為'a'..'z'和'A'..'Y',在用大寫字母表示的牧場中有一只母牛,小寫字母中則沒有。 谷倉的標記是'Z',注意沒有母牛在谷倉中。

注意'm'和'M'不是同一個牧場 否則錯誤 上面的意思是說:輸入數據中可能會同時存在M,m(郁悶ing)(PS:表郁悶…告訴我set of咋用就不郁悶了…),比如

M a a m m z

輸入輸出格式

輸入格式:

?

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

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

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

?

輸出格式:

?

單獨的一行包含二個項目: 最先到達谷倉的母牛所在的牧場的標記,和這只母牛走過的路徑的長度。

?

輸入輸出樣例

輸入樣例#1:
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
輸出樣例#1:
B 11

說明

翻譯來自NOCOW

USACO 2.4

代碼

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<queue>
 7 #include<map>
 8 #define MAXN 30005
 9 #define INF 0x3f3f3f3f
10 using namespace std;
11 
12 map<char,int> m;
13 vector<int> G[MAXN],c[MAXN];
14 int M,dis[MAXN],vis[MAXN];
15 
16 struct cc{int num,d;};
17 cc make(int num,int d){cc a;a.num=num;a.d=d;return a;}
18 struct cmp{bool operator()(cc a,cc b){return a.d>b.d;}};
19 int trans(char a){return m[a];}
20 
21 void init_(){
22     int j=1;    for(char i='a';i<='z';i++,j++){m[i]=j;}
23         j=30;    for(char i='A';i<='Z';i++,j++){m[i]=j;}
24     scanf("%d",&M);
25     
26     for(int i=1;i<=M;i++){
27         char a,b;int w;//格式化輸入??? 
28         cin>>a>>b>>w;
29         G[trans(a)].push_back(trans(b));c[trans(a)].push_back(w);
30         G[trans(b)].push_back(trans(a));c[trans(b)].push_back(w);
31     }
32 }
33 
34 
35 void Dijkstra(){
36     priority_queue<cc,vector<cc>,cmp> q;
37     memset(dis,0x3f,sizeof(dis));
38     int s=trans('Z');
39     dis[s]=0;q.push(make(s,0));
40     while(!q.empty()){
41         int x=q.top().num;q.pop();
42         if(vis[x]) continue;vis[x]=1;
43 //        puts("@");
44         for(int i=0;i<G[x].size();i++){
45             int to=G[x][i];
46             if(dis[x]+c[x][i]<dis[to]){
47                 dis[to]=dis[x]+c[x][i];
48                 q.push(make(to,dis[to]));
49             }
50         }
51     }
52 }
53 
54 void work(){
55     Dijkstra();
56     char ans_num;int ans_step=INF;
57     
58     for(char i='A';i<'Z';i++)
59         if(dis[trans(i)]<ans_step)
60             ans_num=i,ans_step=dis[trans(i)];
61 
62     cout<<ans_num<<" "<<ans_step<<endl;
63 }
64 
65 int main(){
66 //    freopen("01.in","r",stdin);//freopen("01.out","w",stdout);
67     
68     init_();
69     work();
70     
71     fclose(stdin);fclose(stdout);return 0;
72 }

回顧了一下 最短路+map 的神奇組合

轉載于:https://www.cnblogs.com/radiumlrb/p/6048897.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux語言的說明順序有哪些,(linux常用頭文件詳解.doc

(linux常用頭文件詳解linux常用頭文件詳解POSIX標準定義的頭文件??????? 目錄項???????? 文件控制??? 文件名匹配類型??? 路徑名模式匹配類型??????? 組文件??? 網絡數據庫操作??????? 口令文件??? 正則表達式??????? TAR歸檔…

第 39 章 ThinkPHP--視圖

學習要點&#xff1a; 1.模版定義 2.賦值和渲染 3.模版地址 4.獲取內容 本節課&#xff0c;我們將要學習一下 ThinkPHP 視圖&#xff0c;視圖是 Web 的可見內容&#xff0c;一般是 HTML 結合 PHP 獲取的數據提供給用戶使用的部分&#xff0c;屬于 MVC 中的 V。 一&#xff0e;模…

mysql日志(介紹 路徑修改 備份)

2019獨角獸企業重金招聘Python工程師標準>>> 環境&#xff1a;senos6 軟件&#xff1a;mysql2.6.20 mysql日志&#xff1a; 錯誤日志 一般查詢日志 慢查詢日志 二進制日志 只記錄DDL&#xff0c;DML等引起數據庫改變的操作都會記錄下來 復制&am…

Sort

<?xml version"1.0" encoding"utf-8"?> SortSort 1 Sort Select sort is the simplest sorting alogrithms. 1.1 IDEA 1.find the smallest element in the rest of array 2.exchange the element with with the i th entry. 3.repeat step1 and s…

a標簽實現不跳轉點擊

<a class"tiao" href"./index.php"></a> JS實現無跳轉a標簽 <script type"text/javascript"> $(".tiao").click(function (){return false; }) </script> 轉載于:https://www.cnblogs.com/wenhainan/p/…

linux下的c語言控制燈閃爍,C語言實現LED燈閃爍控制

原標題&#xff1a;C語言實現LED燈閃爍控制/********* 配套 **********/#include //包含 寄存器的頭文件/****************************************函數功能&#xff1a;延時一段時間*****************************************/void delay(void) //兩個void意思分別為無需返回…

VBA and Access

>>.用vba連接ACESS&#xff1a; Set Conn Server.CreateObject("ADODB.Connection") Conn.ConnectionString"ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" & Server.MapPath("sample.mdb") Conn.Open>>.用vba連接EXCEL,打開EX…

溫州大學c語言作業布置的網站,老師APP上布置作業 三年級娃為刷排名半夜做題_央廣網...

在溫州讀小學三年級的皮皮(化名)&#xff0c;因為學習需要&#xff0c;在媽媽黃女士的手機里安裝了5個APP學習軟件。有數學速算的&#xff0c;英語配音的&#xff0c;還有語文復習的。這些軟件&#xff0c;都是班上的老師推薦安裝的。每天放學回家&#xff0c;皮皮就拿著黃女士…

Algorithm I assignment Collinear

這本來應該是第三周的作業&#xff0c;但是由于其他作業逼近deadline&#xff0c;暫時推后了一周完成。 這周的assignment大大提高了我對這門課的看法&#xff0c;不得不說&#xff0c;Algorithms這門課的assignment部分設計得很好。為什么好&#xff1f;個人認為有以下幾點&am…

vc c語言坐標圖,VC++6.0下C語言畫圖編程問題

復制內容到剪貼板代碼:#include#includevoid CSinusoidView::OnDraw(CDC* pDC){CSinusoidDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//建立畫筆CPen cpen,pen;pen.CreatePen(PS_SOLID,4,RGB(0,0,0));cpen.CreatePen(PS_SOLID,2…

Java BigDecimal詳解

1.引言 float和double類型的主要設計目標是為了科學計算和工程計算。他們執行二進制浮點運算&#xff0c;這是為了在廣域數值范圍上提供較為精確的快速近似計算而精心設計的。然而&#xff0c;它們沒有提供完全精確的結果&#xff0c;所以不應該被用于要求精確結果的場合。但是…

Erlang庫 -- 有意思的庫匯總

抄自這里 首先&#xff0c;庫存在的目的大致可分為&#xff1a;1、提供便利2、盡可能解決一些痛點首先&#xff0c;我們先明確一下Erlang編程語言的一些痛點&#xff08;偽痛點&#xff09;&#xff1a;1&#xff0c;單進程問題Erlang虛擬機屬于搶占式調度&#xff0c;搶占式調…

windows 串口編程 c語言,windows下C語言版串口發送程序(基于VS2017)

#include "tchar.h"#include int main(){/*****************************打開串口*************************************/HANDLE hCom;//全局變量&#xff0c;串口句柄hCom CreateFile(_T("COM3"),//COM3口GENERIC_READ | GENERIC_WRITE,//允許讀和寫0,/…

scikit-learn決策樹算法類庫使用小結

之前對決策樹的算法原理做了總結&#xff0c;包括決策樹算法原理(上)和決策樹算法原理(下)。今天就從實踐的角度來介紹決策樹算法&#xff0c;主要是講解使用scikit-learn來跑決策樹算法&#xff0c;結果的可視化以及一些參數調參的關鍵點。 1. scikit-learn決策樹算法類庫介紹…

3.js模式-策略模式

1. 策略模式 策略模式定義一系列的算法&#xff0c;把它們封裝起來&#xff0c;并且可以互相替換。 var strategies { isNonEmpty: function(value,errMsg){ if(value ){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ retur…

c語言編寫程序求8,使用c語言編寫程式,實現計算1*2*3+4*5*6+7*8*9+……+28*29*30的值...

使用c語言編寫程式&#xff0c;實現計算1*2*34*5*67*8*9……28*29*30的值以下文字資料是由(歷史新知網www.lishixinzhi.com)小編為大家搜集整理后發布的內容&#xff0c;讓我們趕快一起來看一下吧&#xff01;使用c語言編寫程式&#xff0c;實現計算1*2*34*5*67*8*9……28*29*3…

PHP 正則表達式分割 preg_split 與 split 函數

為什么80%的碼農都做不了架構師&#xff1f;>>> preg_split() preg_ split() 函數用于正則表達式分割字符串。 語法&#xff1a; array preg_split( string pattern, string subject [, int limit [, int flags]] ) 返回一個數組&#xff0c;包含 subject 中沿著與…

簡單學C——第五天

結構體 首先明確&#xff0c;結構體是一種構造的數據類型&#xff0c;是一種由多個數據類型如 int&#xff0c;char&#xff0c;double&#xff0c;數組或者結構體......組成的類型,現在告訴大家如何定義一個結構體。在定義int整型變量時&#xff0c;大家肯定都知道 int a; 即…

C語言二叉樹實驗報告流程圖,二叉樹的建立與遍歷實驗報告(c語言編寫,附源代碼).doc...

二叉樹的建立與遍歷實驗報告(c語言編寫,附源代碼).doc第 1 頁&#xff0c;共 9 頁二叉樹的建立與遍歷實驗報告級 班 年 月 日 姓名 學號_ 1實驗題目建立一棵二叉樹&#xff0c;并對其進行遍歷(先序、中序、后序)&#xff0c;打印輸出遍歷結果。2需求分析本程序用 VC 編寫&#…

三角函數泰勒展開C語言,第六章-函數作業 ---三角函數泰勒級數展開式計算正弦函數值...

E201_06_02_正弦函數題目要求&#xff1a;按照三角函數泰勒級數展開式計算正弦函數值&#xff1a;,直到最后一項的絕對值小于106解題思路&#xff1a;1. 輸入弧度2. 確定初始化值3. 求階梯函數代碼&#xff1a;public class E201_06_02_正弦函數 {public static void main(Stri…