【hdu 2112】 HDU Today ( 最短路 Dijkstra)(map)
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)的更多相关文章
- HDU 2112 HDU Today(Dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...
- hdu 2112 HDU Today
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的 ...
- hdu 2112 HDU Today(map与dijkstra的结合使用)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2112 HDU Today (Dijkstra算法)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 2112 HDU Today (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...
- HDU 2112 HDU Today(最短路径+map)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2112 HDU Today(STL MAP + Djistra)
题目链接:HDU Today 立即集训要開始,抓紧时间练练手,最短路的基础题,第一次用STL的map 题目非常水,可是错了N遍.手贱了.本题不优点理的就是把地名转化为数字 #include <i ...
- ACM学习历程—HDU 2112 HDU Today(map && spfa && 优先队列)
Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...
- HDU 2112 HDU Today 最短路
题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...
- hdu 2112(字典树+最短路)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- 新版 iPad Pro 弯了,苹果表示这是正常现象……
简评:苹果上个月才发布的新版 iPad Pro 出问题了.有用户抱怨说,iPad 出现了机身弯曲.然而苹果公司认为这并不会影响性能,所以坚持这不是一个缺陷,emmm-- 虽然苹果公司的品控一直为人称道 ...
- GitHub创建项目,保存代码。
平时学习会写一些代码,虽然只是零零散散的功能,但是基本都是在一个项目下操作,偶尔会忘记代码编辑顺序.国庆这几天在家,想把GitHub用起来,实现自己代码的可追溯,可查询.学习本篇博客,你需要一点的Gi ...
- String相关练习
1.用代码演示String类中的以下方法的用法 (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true (2)char charAt(int index): 返回索 ...
- Java NIO学习与记录(六): NIO线程模型
NIO线程模型 上一篇说的是基于操作系统的IO处理模型,那么这一篇来介绍下服务器端基于IO模型和自身线程的处理方式. 一.传统阻塞IO模型下的线程处理模式 这种处理模型是基于阻塞IO进行的,上一篇讲过 ...
- (转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别
原帖地址:http://blog.csdn.net/zfrong/article/details/7332545 Android xml资源文件中@.@android:type.@*.?.@+引用写法 ...
- OpenERP button 的三种类型
1. workflow: 默认是这种类型,如果你需要创建工作流类型的button使用这个 2. object: 调用function的类型,如果你需要调用py文件中同名的方法,使用该类型. 3.act ...
- Mac下安装eclipse(Mac 10.12/JDK/tomcat)
1.到官网https://www.eclipse.org/downloads/eclipse-packages/下载安装包 2.安装 注意:安装ecllipse时一定要安装JDK先,最新版本的ecli ...
- 开源:我的Android新闻客户端,速度快、体积小、支持离线阅读、操作简便、内容展现形式丰富多样、信息量大、功能全面 等(要代码的留下邮箱)
分享:我的Android新闻客户端,速度快.体积小.支持离线阅读.操作简便.内容展现形式丰富多样.信息量大.功能全面 等(要代码的留下邮箱) 历时30天我为了开发这个新闻客户端APP,以下简称觅闻 h ...
- Thinkphp3.2.X自动生成应用目录
从3.2.2版本开始,可以支持自动生成默认模块之外的模块目录以及批量生成控制器和模型类. 例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下: // 绑定Admin模块到当 ...
- 【Kafka源码】日志处理
目前来说,kafka的日志中记录的内容比较多,具体的存储内容见这篇博客,写的比较好.可以看到,存储的内容还是比较多的,当存储文件比较大的时候,我们应该如何处理这些日志?下面我们通过kafka启动过程的 ...