【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 ...
随机推荐
- Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置
Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...
- memcache内存存储
memcache的内存分配默认是采用了Slab Allocator的机制分配.管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的. 但是,这种方式会导致内存 ...
- ZooKeeper学习2---ZooKeeper安装配置
一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境:■ 伪集群模式:就是在一台物 ...
- springboot集成JsonRpc2.0
导入依赖的jar: 配置AutoJsonRpcServiceImplExporter: 接口文件: 实现类: 测试:
- Hadoop完全分布式搭建
---记于2015年11月6日星期五 准备工作 软硬件环境 主机操作系统:处理器:i5,主频:3.2G,内存:8G,Windows64 虚拟机软件:VMware Workstation 10 虚拟操作 ...
- python基础知识梳理----3基本数据类型,int,bool,str ,for 循环,迭代
一:python的基本类型 1.int -----整数,主要进行数学运算 2.str -----字符串,可以保存少量数据,并进行相关操作, 3. bool ---布尔类型,判断真假 4.list ...
- uml地址栏参数特殊字符处理
转义方法: function URLencode(sStr) { return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22') ...
- CODEVS-1018单词接龙
单词接龙 原题:传送门 解题思路: 此题是典型的深搜题目,首先确定递归变量,表示字母的数量,每当满足一定条件,就往下一层递归,否则回溯 判断由哪个单词开始(因为可能字母首位可能相同),再确定之后所连单 ...
- 解决FTPClient linux环境下FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题
FTPClient调用retrieveFileStream导致线程挂起(防火墙问题):下载文件小于实际文件问题解决 实际是因为FTP的两种传输模式:主动模式和被动模式的不同而导致的 FTPClient ...
- 在linux上安装 sql server for linux
在linux上安装 sql server for linux Install SQL Server on Red Hat Enterprise Linux Install SQL Server To ...