hdu2112 HDU Today 基础最短路
这题的关键是把车站的名字转化为点的编号。我用的是map。声明一个map<string,int> st,然后按照字符串出现的次序给st赋值。例如:st[s1]=2;代表这字符串s1出现的次序是2。出现过的已经被标记。不会重复。接下来用模版就好。不过有一点要注意的是当起点和终点一样是,要输出0。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std; //在主函数中Map初始化为INF
const int N = , INF =0x3f3f3f3f;
int dist[N], Map[N][N], pre[N];
//dist表示i到s的最短距离,Map记录图,pre记录前驱
bool p[N];//标记点是否已经被选择
void Dijkstra(int n,int s)
{
int i,j,k, MIN;
for(i=; i<=n; i++) //初始化
{
p[i]=;
if(i!=s)
{
dist[i]= Map[s][i];
pre[i]=s;
}
}
dist[s]=;
p[s]=;
for(i=; i<n; i++) //循环n-1次
{
MIN=INF;
k=;
for(j=; j<=n; j++)
{
if(!p[j]&&dist[j]<MIN)
{
MIN= dist[j];
k=j;
}
}
if(!k) return ;//没有点可以扩展
p[k]=; //将k从Vb中除去,加入Va
for(j=; j<=n; j++)
{
if(!p[j]&&Map[k][j]!=INF&&dist[j]>dist[k]+Map[k][j])
{
dist[j]= dist[k] + Map[k][j];
pre[j]=k;
}
}
}
}
void init()
{
for(int i=;i<=N;i++)
for(int j=;j<=N;j++)
Map[i][j]=INF;
}
map<string,int> st;
int main()
{
//freopen("test.txt","r",stdin);
int n,i,j,k;
char s1[],s2[];
while(scanf("%d",&n)!=EOF)
{
if(n==-) break;
scanf("%s%s",s1,s2);
if(strcmp(s1,s2)==) {
for(i=;i<n;i++)
scanf("%s%s%d",s1,s2,&k);
printf("0\n");
continue;
}
init();
st.clear();
st[s1]=; st[s2]=;
j=;
for(i=;i<n;i++)
{
scanf("%s%s%d",s1,s2,&k);
if(st[s1]==) st[s1]=++j;
if(st[s2]==) st[s2]=++j;
if(st[s1]==st[s2]) continue;
Map[st[s2]][st[s1]]=Map[st[s1]][st[s2]]=min(k,Map[st[s1]][st[s2]]);
}
Dijkstra(j,);
if(dist[]<INF)
printf("%d\n",dist[]);
else printf("-1\n"); }
return ;
}
hdu2112 HDU Today 基础最短路的更多相关文章
- hdu2112(HDU Today 简单最短路)
Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...
- hdu 4568 Hunter 最短路+dp
Hunter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2509 基础Anti-SG NIM
如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:(1)游戏的SG!=0 && 存在单一游戏的SG>1:(2)游戏的SG==0 && ...
- HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化
翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...
- HDU 2188 基础bash博弈
基础的bash博弈,两人捐钱,每次不超过m,谁先捐到n谁胜. 对于一个初始值n,如果其不为(m+1)的倍数,那么先手把余数拿掉,后继游戏中不管如何,后手操作后必定会有数余下,那么先手必胜,反之后手必胜 ...
- HDU 2176 基础NIM 输出方案
普通的NIM,然后问先手必胜第一次操作后的所有局面. 对于一个必胜局面只要转变局面SG值为必败(SG=0)留给后手就行了. /** @Date : 2017-10-13 21:39:13 * @Fil ...
- HDU2112 HDU Today 最短路+字符串哈希
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给你N个公交车站,起点,终点,各站之间的距离,求起点到终点之间的最短距离.(起点终点相 ...
- hdu - 2066 一个人的旅行(基础最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=2066 把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可. #inc ...
随机推荐
- .NET Framework 3.5 安装
今天vCenter服务器悲剧了,只好火速重新部署新vCenter服务器... Windows server 2016 中,安装VCenter 5.5 提示 未安装 .NET Framework 3. ...
- NW.js构建PC收银端安装程序的指南
1.首先下载nw.js的SDK: https://nwjs.org.cn/download.html 2.SDK目录下新建myapp文件夹: 3.myapp文件夹内新建package.json文件: ...
- Markdown 常用语法总结
注意:Markdown使用#.+.*等符号来标记,符号后面必须跟上至少跟上 1个空格才有效! Markdown的常用语法 标题 Markdown标题支持两种形式. 1.用#标记 在标题开头加上1~6个 ...
- [51Nod 1218] 最长递增子序列 V2 (LIS)
传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...
- Nginx面试中最常见的18道题 抱佛脚必备
Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯.淘宝.百度.京东.新浪.网易等等.Nginx是网页服务器运维人员 ...
- 邓_ Phpcms·二次开发
PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...
- Spring data jpa 条件查询-按时间段查询
项目开发中的代码片段,仅供参考 @Override public Page<泛型> findRecordList(int couponDetailId, int pageNum, int ...
- rmq问题和lca可以相互转化
Sparse Table算法 一般RMQ的Sparse Table(ST)算法是基于倍增思想设计的O(Nlog2N) – O(1)在线算法 算法记录从每个元素开始的连续的长度为2k的区间中元素的最小值 ...
- 0606关于mysql优化原理
转自 http://blog.csdn.net/u012388497/article/details/25097159 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序.表结构和数据准 ...
- 【ACM】poj_2356_Find a multiple_201308061947
Find a multipleTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 4988 Accepted: 2159 Spe ...