Idiomatic Phrases Game


Time Limit: 2 Seconds      Memory Limit: 65536 KB


Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese characters and has a certain meaning. This game will give Tom two idioms.
He should build a list of idioms and the list starts and ends with the two given idioms. For every two adjacent idioms, the last Chinese character of the former idiom should be the same as the first character of the latter one. For each time, Tom has a dictionary
that he must pick idioms from and each idiom in the dictionary has a value indicates how long Tom will take to find the next proper idiom in the final list. Now you are asked to write a program to compute the shortest time Tom will take by giving you the idiom
dictionary.

Input

The input consists of several test cases. Each test case contains an idiom dictionary. The dictionary is started by an integer N (0 < N < 1000) in one line. The following is N lines.
Each line contains an integer T (the time Tom will take to work out) and an idiom. One idiom consists of several Chinese characters (at least 3) and one Chinese character consists of four hex digit (i.e., 0 to 9 and A to F). Note that the first and last idioms
in the dictionary are the source and target idioms in the game. The input ends up with a case that N = 0. Do not process this case.

Output

One line for each case. Output an integer indicating the shortest time Tome will take. If the list can not be built, please output -1.

Sample Input

5
5 12345978ABCD2341
5 23415608ACBD3412
7 34125678AEFD4123
15 23415673ACC34123
4 41235673FBCD2156
2
20 12345678ABCD
30 DCBF5432167D
0

Sample Output

17
-1

Author: ZHOU, Ran

Source: Zhejiang Provincial Programming Contest 2006

解题报告
比較简单的最短路,处理建图就能够了。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#define inf 99999999
using namespace std;
struct node
{
int t;
char idiom[100];
} List[1010];
int n,mmap[1010][1010],dis[1010],vis[1010];
int Is_same(char *str1,char *str2)
{
char s[10];
int l1=strlen(str1),k=0;
strncpy(s,str2,4);
for(int i=l1-4; i<l1; i++)
{
if(str1[i]!=s[k++])
return 0;
}
return 1;
}
void dij()
{
int i,j,minn,u;
for(i=0; i<n; i++)
{
dis[i]=mmap[0][i];
vis[i]=0;
}
vis[0]=1;
dis[0]=0;
for(i=0; i<n-1; i++)
{
u=0;
minn=inf;
for(j=0; j<n; j++)
{
if(!vis[j]&&dis[j]<minn)
{
minn=dis[j];
u=j;
}
}
vis[u]=1;
for(j=0; j<n; j++)
{
if(!vis[j]&&dis[j]>dis[u]+mmap[u][j])
{
dis[j]=dis[u]+mmap[u][j];
}
}
} if(dis[n-1]!=inf)
{
printf("%d\n",dis[n-1]);
}
else printf("-1\n");
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
if(!n)break;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
mmap[i][j]=inf;
mmap[i][i]=0;
}
for(i=0; i<n; i++)
scanf("%d%s",&List[i].t,List[i].idiom);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i!=j)
if(Is_same(List[i].idiom,List[j].idiom))
{
mmap[i][j]=List[i].t;
}
}
}
dij();
}
return 0;
}

ZOJ2750_Idiomatic Phrases Game(最短路)的更多相关文章

  1. ZOJ-2750 Idiomatic Phrases Game---Dijk最短路

    题目链接: https://vjudge.net/problem/ZOJ-2750 题目大意: 给定一本字典,字典里有很多成语,要求从字典里的第一个成语开始,运用字典里的成语变到最后一个成语,变得过程 ...

  2. Idiomatic Phrases Game(最短路+注意坑点)

    Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese characters ...

  3. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  4. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  5. 最短路&查分约束

    [HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...

  6. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  7. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

  8. hdu图论题目分类

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. HDU图论题单

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

随机推荐

  1. systemtap 用户态调试2

    [root@localhost ~]# cat user.stpprobe process(@1).function(@2){print_ubacktrace();exit();} session 1 ...

  2. 内核升极2.6.18 升级到 2.6.32 装systemtap 原创

    系统: redhat serever 5.3  linux 2.6.18 现在要升级到 LINUX 内核 2.6.32 安装步骤: 1.下载装源代码: https://www.kernel.org/ ...

  3. Windows程序的打包,部署(vs项目打包vs2013)---ShinePans

    Windows 应用程序在开发完毕之后,怎样将程序打包并制作成安装程序在客户机上部署 是每一个windows应用程序开发完毕之后都必须面对的问题. 学习目标:                    部 ...

  4. IIS服务中五种身份验证

    转载:http://os.51cto.com/art/201005/202380.htm 作为微软最经典的Web服务之一的IIS服务有大致上五种Web身份认证方法.身份认证时保障IIS服务安全的根本, ...

  5. mq刷盘方式

    Broker 在收到Producer发送过来的消息后,会存入CommitLog对应的内存映射区中,见CommitLog类的putMessage方法.该方法执行OK后,会判断存储配置中刷盘模式:同步or ...

  6. jsp中生成txt文件

    import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.Writab ...

  7. 如何搭建 LNMP环境

    和LAMP不同的是LNMP中的N指的是是Nginx(类似于Apache的一种web服务软件)其他都一样.目前这种环境应用的也是非常之多. Nginx设计的初衷是提供一种快速高效多并发的web服务软件. ...

  8. python里的引用、浅拷贝、深拷贝

    参考: 1.http://wsfdl.com/python/2013/08/16/%E7%90%86%E8%A7%A3Python%E7%9A%84%E6%B7%B1%E6%8B%B7%E8%B4%9 ...

  9. QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型

    QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant headerDa ...

  10. SQL语句大小写是否区分的问题,批量修改整个数据库所有表所有字段大小写

    一.实例介绍 SQL语句大小写到底是否区分呢?我们先从下面的这个例子来看一下: 例: --> 创建表,插入数据: declare @maco table (number int,myvalue ...