【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 ...
随机推荐
- Activity启动流程
Activity启动过程中做了哪些事情?下面的时序图展示里启动过程中函数的调用过程, 从图中可以知道大概流程. 在介绍细节的时候是从上往下函数调用过程介绍的,如果不知道某个函数是在哪里被谁调用的,可以 ...
- Flutter 1.0 正式版: Google 的便携 UI 工具包
简评:所以 React-Native 和 Flutter 该怎么选? 在 10 个月前的 MWC 上,谷歌发布了 Flutter 的 Beta 版本,给跨平台应用开发带来了一种全新的选择,昨天谷歌正式 ...
- 记录一次因为意外断电造成gitlab(docker容器)重启之后无法访问的问题
容器启动成功,但是处于unhealthy状态,登录界面500. docker logs gitlab 最终错误是 err="opening storage failed: open bloc ...
- 在 iOS 中使用 iconfont
如何使用自定义字体 在讲icon font之前,首先先来看看普通自定义字体是如何在ios中使用的,两个原理是一样的.这里以KaushanScript-Regular为例: Step 1: 导入字体 ...
- knova绘制矩形
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Python基础部分的疑惑解析(2)
变量: 变量名由 字母.数字.下划线构成,数字不能做为开头 不能用关键字:另外一些内置的方法也别用 推荐使用下划线命名间两个单词user_id 变量在最后底层处理的时候没什么意义,但是在命名的时候有利 ...
- hdu 1233 还是畅通工程 并查集or最小生成树
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路 ...
- 关于ubuntu环境下gcc使用的几点说明
sudo apt-get build-dep gcc //安装gcc编译器 /* 假设已经创建hello.c文件 */ //方法一 $gcc hello.c //将源文件直接编译成文件名为a.out的 ...
- PHP反序列化漏洞新攻击面(BlackHat 2018)
0x00 前言 入职以来好久没有写过文章了,入职的时间里也和师傅们学到了很多,认识了很多的新朋友.最近因为BlackHat 黑客大会的一个议题,PHP反序列化漏洞利用被挖掘出新的攻击面.这里本着记 ...
- centos 7 查看所有登录用户的操作历史
2019-01-07 转自 https://www.cnblogs.com/kevingrace/p/7373146.html centos 7 查看所有登录用户的操作历史 在Linux系统的环境下 ...