洛谷 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)。
输出格式:
单独的一行包含二个项目: 最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。
输入输出样例
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
B 11
说明
翻译来自NOCOW
USACO 2.4
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#define MAXN 30005
#define INF 0x3f3f3f3f
using namespace std; map<char,int> m;
vector<int> G[MAXN],c[MAXN];
int M,dis[MAXN],vis[MAXN]; struct cc{int num,d;};
cc make(int num,int d){cc a;a.num=num;a.d=d;return a;}
struct cmp{bool operator()(cc a,cc b){return a.d>b.d;}};
int trans(char a){return m[a];} void init_(){
int j=; for(char i='a';i<='z';i++,j++){m[i]=j;}
j=; for(char i='A';i<='Z';i++,j++){m[i]=j;}
scanf("%d",&M); for(int i=;i<=M;i++){
char a,b;int w;//格式化输入???
cin>>a>>b>>w;
G[trans(a)].push_back(trans(b));c[trans(a)].push_back(w);
G[trans(b)].push_back(trans(a));c[trans(b)].push_back(w);
}
} void Dijkstra(){
priority_queue<cc,vector<cc>,cmp> q;
memset(dis,0x3f,sizeof(dis));
int s=trans('Z');
dis[s]=;q.push(make(s,));
while(!q.empty()){
int x=q.top().num;q.pop();
if(vis[x]) continue;vis[x]=;
// puts("@");
for(int i=;i<G[x].size();i++){
int to=G[x][i];
if(dis[x]+c[x][i]<dis[to]){
dis[to]=dis[x]+c[x][i];
q.push(make(to,dis[to]));
}
}
}
} void work(){
Dijkstra();
char ans_num;int ans_step=INF; for(char i='A';i<'Z';i++)
if(dis[trans(i)]<ans_step)
ans_num=i,ans_step=dis[trans(i)]; cout<<ans_num<<" "<<ans_step<<endl;
} int main(){
// freopen("01.in","r",stdin);//freopen("01.out","w",stdout); init_();
work(); fclose(stdin);fclose(stdout);return ;
}回顾了一下 最短路+map 的神奇组合
洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 && 乱搞的更多相关文章
- 洛谷P1529 回家 Bessie Come Home
P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出 ...
- 洛谷——P1529 回家 Bessie Come Home
P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出 ...
- 洛谷 P1529 回家 Bessie Come Home
P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出 ...
- 洛谷 P2802 回家
题目链接 https://www.luogu.org/problemnew/show/P2802 题目描述 小H在一个划分成了n*m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...
- 【bzoj2118&洛谷P2371】墨墨的等式(最短路神仙题)
题目传送门:bzoj2118 洛谷P2371 这道题看了题解后才会的..果然是国家集训队的神仙题,思维独特. 首先若方程$ \sum_{i=1}^{n}a_ix_i=k $有非负整数解,那么显然对于每 ...
- 【POJ3255/洛谷2865】[Usaco2006 Nov]路障Roadblocks(次短路)
题目: POJ3255 洛谷2865 分析: 这道题第一眼看上去有点懵-- 不过既然要求次短路,那估计跟最短路有点关系,所以就拿着优先队列优化的Dijkstra乱搞,搞着搞着就通了. 开两个数组:\( ...
- 洛谷——2639[USACO09OCT]Bessie的体重问题Bessie's We…——01
题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H & ...
随机推荐
- 11月8日PHP练习《留言板》
一.要求 二.示例页面 三.网页代码及网页显示 1.denglu.php 登录页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- java 追加文件
FileWriter writer = null; String fileName="d://my.txt"; String line="要追加的内容"; tr ...
- 深入理解javascript原型和闭包(8)——简述【执行上下文】上
什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时, ...
- php函数fgets读取文件
如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.t ...
- 错误 Metadata file 'C:\Common\bin\Debug\Common.dll' could not be found
一个通用方法de类库/总是报这个错误/很明显就是没有成功生成程序集... 但是就是找不到哪里的错误!!!! 如果是代码写错的话,可能会直接提示在哪个文件中哪行代码写错了,然后dll生成不了,但是这个错 ...
- Login Reference for PhotoSomething
Android Background Processing with Handlers and AsyncTask and Loaders - Tutorial http://www.vogella. ...
- Linux/CentOS 搭建 SVN 项目
1.安装svn yum -y install subversion 2.创建svn仓库路径 mkdir -p /opt/svn/project1 mkdir -p /opt/svn ...
- struts2 用if标签判断字符串包含
String testStr = "用来判断是否包含的字符串"; <s:property value="testStr"/> <s:if te ...
- window下安装zookeeper
本地zookeeper安装(win7)下载zookeeper-3.3.6.zip文件解压zookeeper-3.3.6.zip文件到d:盘在D:\zookeeper-3.3.6\conf下增添 zoo ...
- C++,当类名和对象名称相同时会发生什么?
今天突发奇想,如果类名和由这个类声明的对象标识符相同时会发生什么,然后就测试了一下.如下: #include <iostream> using namespace std; class a ...