http://acm.hdu.edu.cn/showproblem.php?pid=2112

这道题给了一个将字符串与int对应的思路,就是使用map

这道题答案对了,但是没有AC,我也不知道为什么。。

 #include <iostream>
#include <cstdio>
#include <string>
#include <queue>
#include <vector>
#include <map>
using namespace std;
const int Ni = ;
const int INF = <<; typedef pair<int,int> pa; int dis[Ni],n;//dis使用1~n的部分 vector<pair<int,int> > eg[Ni]; void Dijkstra(int s)
{
int i,j;
cout<<n<<endl;
for(i=;i<=n;i++)//要到n
dis[i] = INF; priority_queue<pa>q; //优先级队列:小顶堆
dis[s] = ;
q.push(make_pair(s,dis[s]));
while(!q.empty())
{
pa x = q.top();
q.pop();
int w = x.first;
for(j = ;j<eg[w].size();j++)//遍历x的所有邻接点
{
pa y = eg[w][j];//y是x的邻接点
int u = y.first;
if(dis[u]>x.second+y.second)
{
dis[u] = x.second+y.second;
q.push(make_pair(u,dis[u]));
}
}
} } int main()
{
int m,d;//关系个数
string a,b;
map<string,int> mp;
while(cin>>n && n!=-)
{
mp.clear();
for(int i = ;i<=n;i++)
eg[i].clear();//初始化
cin>>a>>b;
bool flag = false;
if(a==b)
flag = true;
mp[a] = ;
mp[b] = ;
int k = ;
int w,u;
int t = n;
while(t--)
{
cin>>a>>b>>d;
if(!mp[a])
{
w = k;
mp[a] = k++;
}
if(!mp[b])
{
u = k;
mp[b] = k++;
}
eg[mp[a]].push_back(make_pair(mp[b],d));
eg[mp[b]].push_back(make_pair(mp[a],d));
}
if(flag)
{
cout<<"0\n";
continue;
}
Dijkstra();
if(dis[]!=INF)
cout<<dis[]<<endl;
else
cout<<"-1\n";
} return ;
}

第二次写,依旧WA

 #include <cstdio>
#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
using namespace std; #define MEM(a,v) memset (a,v,sizeof(a))
// a for address, v for value #define max(x,y) ((x)>(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y)) #define debug printf("!\n") const int L = ;
const int INF = <<; int n; struct node
{
int x,w; node(){}
node(int a,int b)
{ x= a;w =b;} bool operator <(const node& a) const
{
return w<a.w;
}
}; vector<node> va[L];
int dis[L]; void Dijkstra(int s)
{
int i;
for(i=;i<=n;i++)
dis[i] = INF; dis[s] = ; priority_queue<node> q;
q.push(node(s,dis[s])); while(!q.empty())
{
node t = q.top();
q.pop(); int x = t.x; for(i = ;i<va[x].size();i++)
{
node y = va[x][i];
if(dis[y.x]>y.w+t.w)
{
dis[y.x] = y.w+t.w;
q.push(node(y.x,dis[y.x]));
}
}
}
} int main()
{
int i,j; bool flag; char begin[],end[];
char c[],d[]; map<string,int> mp; int w,k; while(scanf("%d",&n)!=EOF && n!=-)
{ mp.clear(); for(i = ;i<=n;i++)
va[i].clear(); flag = false; scanf("%s%s",begin,end); if(strcmp(begin,end) == )
flag = true; mp[begin] = ;
mp[end] = ; k = ; for(i = ;i<n;i++)
{
scanf("%s%s%d",c,d,&w); if(!mp[c])
mp[c] = k++;
if(!mp[d])
mp[d] = k++; va[mp[c]].push_back(node(mp[d],w));
} if(flag)
{
printf("0\n");
continue;
}
Dijkstra();
if(dis[]!=INF)
printf("%d\n",dis[]);
else
printf("-1\n");
} return ;
}

UPDATE:

AC,780MS

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue #define INF 0x3f3f3f3f int n,k;
int g[][];//map
int vis[],d[];
char name[][],str1[],str2[]; int dijkstra(int v)
{
int i,j,min,dir;
for(i=;i<k;i++)
{
vis[i]=;
d[i]=g[v][i];
} vis[v] = ;
d[v]=; for(i = ;i<k;i++)
{
min = INF;
for(j=;j<k;j++)
{
if(!vis[j] && min>d[j])
{
min = d[j];
dir = j;
}
}
if(min==INF) break;
vis[dir]=;
for(j=;j<k;j++)
{
if(!vis[j] && d[j] > d[dir]+g[dir][j])
d[j] = d[dir]+g[dir][j];
}
}
return d[];
} int main()
{
int a,num1,num2,i,j;
while(sf("%d",&n)== && n!=-)
{
mem(g,);
sf("%s %s",name[],name[]);
k=;
for(i = ;i<n;i++)
{
sf("%s %s %d",str1,str2,&a);
for(j = ;j<k;j++)
{
if(strcmp(str1,name[j])==)
{
num1 = j;
break;
}
}
if(j==k)
{
num1 = k;
strcpy(name[k++],str1);
}
for(j = ;j<k;j++)
{
if(strcmp(str2,name[j])==)
{
num2 = j;
break;
}
}
if(j==k)
{
num2 = k;
strcpy(name[k++],str2);
}
if(g[num1][num2]>a)
g[num1][num2]=a;
if(g[num2][num1]>a)
g[num2][num1]=a; }
if(strcmp(name[],name[])==)
pf("0\n");
else
{
i = dijkstra();
if(i>=INF)
pf("-1\n");
else
pf("%d\n",i);
}
}
}

【hdu 2112】 HDU Today ( 最短路 Dijkstra)(map)的更多相关文章

  1. HDU 2112 HDU Today(Dijkstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...

  2. hdu 2112 HDU Today

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的 ...

  3. hdu 2112 HDU Today(map与dijkstra的结合使用)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. HDU 2112 HDU Today (Dijkstra算法)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. hdu 2112 HDU Today (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...

  6. HDU 2112 HDU Today(最短路径+map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 2112 HDU Today(STL MAP + Djistra)

    题目链接:HDU Today 立即集训要開始,抓紧时间练练手,最短路的基础题,第一次用STL的map 题目非常水,可是错了N遍.手贱了.本题不优点理的就是把地名转化为数字 #include <i ...

  8. ACM学习历程—HDU 2112 HDU Today(map && spfa && 优先队列)

    Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...

  9. HDU 2112 HDU Today 最短路

    题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...

  10. hdu 2112(字典树+最短路)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. Q4m使用手册

    q4m是基于mysql存储引擎的轻量级消息队列,通过扩展SQL语法来操作消息队列,使用简单,容易上手,开发人员基本不用再进行学习和熟悉.Q4M支持多发送方,多接收方,接收方相互不影响,php项目中异步 ...

  2. Elasticsearch(9):使用Logstash-input-jdbc同步数据库中的数

    1.数据同步方式 全量同步与增量同步 全量同步是指全部将数据同步到es,通常是刚建立es,第一次同步时使用.增量同步是指将后续的更新.插入记录同步到es. 2.常用的一些ES同步方法 1). elas ...

  3. [Objective-C语言教程]日志处理(21)

    为了打印日志,可使用Objective-C编程语言中的NSLog方法,首先在HelloWorld示例中使用了这个方法. 下面来看一下打印“Hello World”字样的简单代码 - #import & ...

  4. Linux 开机过程(转)

    Linux 开机过程 初始化 POST(加电自检)并执行硬件检查: 当 POST 完成后,系统的控制权将移交给启动管理器的第一阶段(first stage),它存储在一个硬盘的引导扇区(对于使用 BI ...

  5. [SQL] 简单新建(create)删除(drop\delete)权限(grant/revoke)修改(set\update)

    一.前言 说起来 数据库(Structured Query Language),本站写过很多类似文章. 如: Mysql创建.删除用户 phpMyAdmin 登陆需要密码 记一次裸迁 MySQL 经历 ...

  6. time 模块学习

    前情提要: time模块是经常使用的模块.主要是用来记录时间,以及时间上的相关操作 一:时间戳 1:第一种形式 import time print(time.time()) 从1970 1 1 0:0 ...

  7. 总结day7 ---- 文件操作,读,写,追加,以及相关方法

    内容大纲 一:文件的基本操作, >常见问题 >encoding >绝对路径和相对路径的 二:文件的读写追加相关操作 >读(r, r+ ,rb,r+b) >写(w,w+,w ...

  8. day2: python3.5学习——逻辑判断

    1. 简单的用户名和密码输入 username = "Helen"password = "123abc" _username = input("use ...

  9. 常用的re正则

    常用的正则表达式: 用户名:/^[a-z0-9_-]{3,16}$/ 密码:/^[a-z0-9_-]{6,18}$/ 十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/ 电子邮 ...

  10. 网络基础 05_DHCP

    1 DHCP概述 DHCP (Dynamic Host Configuration Protocol)是一种动态的向Internet终端提供配置参数的协议.在终端提出申请之后,DHCP可以向终端提供I ...