USACO Section 2.4 回家 Bessie Come Home

题目描述

现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为‘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 #include<iostream>
 2 using namespace std;
 3 const int inf=1<<30;
 4 int P,G[53][53],d[53],v[53];
 5 int ID(char c){
 6     if(‘A‘<=c&&c<=‘Z‘) return c-‘A‘+1;
 7     return c-‘a‘+27;
 8 }
 9 int main()
10 {
11     for(int i=1;i<=52;i++) for(int j=1;j<=52;j++) G[i][j]=(i==j?0:inf);
12     for(int i=1;i<=52;i++) v[i]=0;
13     for(int i=1;i<=52;i++) d[i]=inf;
14     d[26]=0;
15     char f,t;
16     int dist;
17     cin>>P;
18     while(P--){
19         cin>>f>>t>>dist;
20         G[ID(f)][ID(t)]=G[ID(t)][ID(f)]=min(dist,G[ID(t)][ID(f)]);
21         //两个牧场之间不一定只有一条路径
22     }
23     for(int i=1;i<=52;i++){
24         int x,m=inf;
25         for(int j=1;j<=52;j++){
26             if(!v[j]&&(d[j]<=m)/*小于等于*/) m=d[x=j];
27         }
28         v[x]=1;
29         for(int j=1;j<=52;j++){
30             if(!v[j]&&G[x][j]<inf&&G[x][j]+d[x]<d[j])
31                 d[j]=d[x]+G[x][j];
32         }
33     }
34     int x,ans=inf;
35     for(int i=1;i<26;i++){
36         if(d[i]<ans) ans=d[x=i];
37     }
38     cout<<(char)(x+‘A‘-1)<<" "<<ans;
39     return 0;
40 } 
时间: 2024-10-13 16:03:08

USACO Section 2.4 回家 Bessie Come Home的相关文章

洛谷P1529 回家 Bessie Come Home

P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛

USACO Section 2.1 Healthy Holsteins

/* ID: lucien23 PROG: holstein LANG: C++ */ #include <iostream> #include <fstream> #include <vector> using namespace std; bool compFun(int x, int y) { int temp, i = 0; while (true) { temp = 1 << i; if (temp&x > temp&y) {

USACO Section 2.2 Party Lamps

/* ID: lucien23 PROG: lamps LANG: C++ */ /* * 此题的技巧之处就是需要注意到任何button只要按下2的倍数次就相当于没有按 * 所以其实只需要考虑4个按钮,每个按钮是否被有效按下过一次就好 * 直接使用枚举法,一共只有2^4=16种情况 * 对于每种情况需要知道被按下的有效次数(也就是被按下过的按钮数),必须满足 * (C-有效次数)%2=0才行,这样其他次数才能视为无效 * 然后验证各种情况是否符合要求,将符合要求的情况按序输出即可 */ #inc

USACO Section 2.2 Runaround Numbers

/* ID: lucien23 PROG: runround LANG: C++ */ #include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { ifstream infile("runround.in"); ofstream outfile("runround.out"); if(!infile || !

USACO Section 2.2 Preface Numbering

/* ID: lucien23 PROG: preface LANG: C++ */ #include <iostream> #include <fstream> #include <string> #include <map> using namespace std; int main() { ifstream infile("preface.in"); ofstream outfile("preface.out")

洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 &amp;&amp; 乱搞

题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径. 当然,

USACO Section 4.2 Drainage Ditches

最大流问题.ISAP算法.注意可能会有重边,不过我用的数据结构支持重边.距离d我直接初始化为0,也可以用BFS逆向找一次. #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<queue> #define rep(i,l,r) for(int i=l;i<r;i++) #define

USACO Section 2.1 Sorting a Three-Valued Sequence

/* ID: lucien23 PROG: sort3 LANG: C++ */ #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; void exchange(int nums[], int begin, int end, int N, int x); int sum = 0; int main() { ifst

USACO Section 1.1 Your Ride Is Here

原题: Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often come to collect loyal supporters from here on Earth. Unfortunately, they only have room to pick up one group of followers on each trip. They do, how