转自:https://blog.csdn.net/u013480600/article/details/37723563
题目链接:https://vjudge.net/problem/HDU-1546
题意:给你一个有0-9和A-F字符组成单词的字典.字典中的两个单词a与b ,如果a的后4个字符与b的前4个字符相同,那么存在一条从a到b的代价为val[a]的有向边.现在要你找出从第一个单词到最后一个单词的最小花费.如果不存在有向边,那么输出-1.
思路:dijkstra,但是一定要注意如何建图。
坑点:如果把一个成语拆开,用开头和结尾当做两个点a,b,代价就是a到b连一条有向边。看上去没什么错,但是有可能中间有一个成语的开头与目标成语的开头是一致的并且到中间成语的总花费小于到目标成语的花费,那样就错了。还有一种情况:因为必须用第一个成语,因此一开始的结尾一定是第一个成语的结尾,如果按照上述方法跑最短路,有可能一开始就没有经过第一个成语的结尾,那样也是错的。因此必须用一个成语当做一个点。

#include <bits/stdc++.h>
using namespace std;
int n;
const int maxn=1005;
const int inf=0x3f3f3f3f;
int d[maxn];
struct point
{int val;string str;bool link(point &a){int l=str.length();for(int i=0; i<4; i++){if(str[l-4+i]!=a.str[i])return false;}return true;}
} po[maxn];
struct Edge
{int from,to,dist;Edge(int f,int t,int d){from=f;to=t;dist=d;}
};
struct node
{int d,u;node(int a=0,int b=0){d=a;u=b;}bool operator <(const node&s)const{return d>s.d;}
};
vector <Edge>edges;
vector <int>g[maxn];
bool done[maxn];
void addedge(int from,int to,int dist)
{edges.push_back(Edge(from,to,dist));int m=edges.size();g[from].push_back(m-1);
}
void dijkstra(int s)
{priority_queue<node> q;memset(d,inf,sizeof(d));memset(done,0,sizeof(done));d[s]=0;q.push(node(0,s));while(!q.empty()){node x=q.top();q.pop();int u=x.u;if(done[u])continue;done[u]=true;for(int i=0; i<g[u].size(); i++){Edge &e=edges[g[u][i]];if(d[e.to]>d[u]+e.dist){d[e.to]=d[u]+e.dist;q.push(node(d[e.to],e.to));}}}
}
int main()
{while(scanf("%d",&n)&&n){edges.clear();for(int i=0; i<maxn; i++){g[i].clear();}for(int i=1; i<=n; i++){cin>>po[i].val>>po[i].str;}for(int i=1; i<=n; i++){for(int j=i+1; j<=n; j++){if(po[i].link(po[j])){addedge(i,j,po[i].val);}if(po[j].link(po[i])){addedge(j,i,po[j].val);}}}dijkstra(1);if(d[n]!=inf)printf("%d\n",d[n]);elseprintf("-1\n");}return 0;
}

HDU-1546 dijkstra相关推荐

  1. 【HDU - 1546】 Idiomatic Phrases Game(Dijkstra,可选map处理字符串)

    题干: Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese charac ...

  2. HDU 1546 (最短路 Dijkstra算法)

    题目: Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese charac ...

  3. HDU_2112 HDU Today(DIjkstra + map映射)

    这题做的真的很想砸电脑!!!!TLE, 完了WA, 检查完错误又RE,无数次的RE,RE,RE,RE!!!RE你妹啊!把字符串定义在while()外边就能过,定义在里边就RE,还有char型能过,st ...

  4. hdu 1546(最短路)

    题意:成语接龙的游戏,一个中文字是四个字符组成,所以只要一个字符串后四个字符与另一个字符串的头四个字符能匹配,那么就能接上,求出从第一个到最后一个的最短时间. 不知道是建图的问题还是什么,一直WA.. ...

  5. hdu 2544 dijkstra

    链接矩阵+优先队列 #include <iostream> #include <cstring> #include <set> #include <queue ...

  6. HDU 1546 Idiomatic Phrases Game

    传送门 最短路. 这道题题意比较烦,其实就是成语接龙.给你一个成语的列表(字典)(每个成语用十六进制字符串表示),规定字典的第一个成语和最后一个成语是你完成成语接龙的起点和终点,然后你在字典里面选成语 ...

  7. hdu 1874 Dijkstra算法模板

    单源最短路径 迪杰斯特拉算法 1.初始化地图,map[i][j]记录城镇 i,j之间最短的道路长度, 若无道路连通 ,则为极大值 2.从起始城镇开始,用广度优先搜索思想,嵌入松弛处理算法, 用dis[ ...

  8. 【POJ - 3037】Skiing (Dijkstra算法)

    题干: Bessie and the rest of Farmer John's cows are taking a trip this winter to go skiing. One day Be ...

  9. 最短路径问题经典题目汇总

    50道数据结构最短路径问题 HDU 1142 http://acm.hdu.edu.cn/showproblem.php?pid=1142 HDU 1217 http://acm.hdu.edu.cn ...

  10. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

最新文章

  1. 转载:SecureCRT 唯美配色方案
  2. mybaits十一:使用association分步查询
  3. 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
  4. 工业以太网交换机的概念及其主要功能介绍
  5. TCP和IP协议的特点
  6. 【HANA系列】SAP HANA Studio出现Fetching Children...问题
  7. mysql5.7设置不区分大小写
  8. 华为云瑶光:打通云边端界限,为企业云上业务带来最优解
  9. myeclipse里使用fat jar生成可执行jar
  10. linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
  11. Emberjs学习之路(一)
  12. stata 空间杜宾模型_空间面板数据模型及Stata实现
  13. 2021暑期实习:网易互娱游戏测试最新面经!
  14. PHP连接MySQL数据库过程
  15. Python 玩转数据 19 - 数据操作 正则表达式 Regular Expressions 搜索模式匹配
  16. 图解 SQL 基础知识
  17. Java语言之父James Gosling
  18. 【AUTOSAR CanDrive 2.了解通信Hoh、CanId与PduID的Mapping关系】
  19. Ubuntu 21.04 使用Docker部署深度学习项目(cuda11.2+cudnn8.8+deepface)
  20. 苹果拟4亿美元收购音乐识别软件Shazam

热门文章

  1. codevs——T1337 银行里的迷宫
  2. java实现加密———Base64加解密
  3. java 内存溢出时打印_如何在JVM内存溢出的时候自动dump内存快照
  4. 伯乐识英才,我们招聘啦!
  5. Firefox 主页 被篡改为 2345主页
  6. UnRaid开启网卡SR-IOV并直通给虚拟机的方法
  7. FFmpeg解码视频帧为jpg图片保存到本地
  8. autogloun自然语言处理
  9. 我本人一直以来犯的错误,在看了《Think In Java》后才抓了出来
  10. 多智能体协同传输的事件触发通信与控制的深度强化学习(ICRA-2021)