hdu 4522(图论,构图)
湫湫系列故事——过年回家
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1266 Accepted Submission(s): 282
同时,每年的春节湫秋也都会纠结一把,因为车票实在是太难抢了,不过2013的春节有点特殊,作为一个曾经的ACMer,湫湫制作出了很完美的刷票机,
也就是说她再也不用担心买不上票了,但是想来想去还是觉得随便买票实在是浪费了辛辛苦苦搞出来的刷票机,所以她决定要用最舒适的方式回家。
假
设湫湫有可能经过的n个城市分别编号从1到n,湫湫要从城市A回到城市B,购票网站上列出了t辆列车行程,每辆车的行程用一个字符串表示,途径的城市间
用+号相连,如1+2+3+5代表一辆从1城市分别经过2,3到达5的火车,湫湫可以从中间任意一站出发和下车(路径是单向的,即必须沿字符串从左到右来
走),每个字符串对应着一个整数k,k=0表示该车只有硬座,k=1表示该车有卧铺也有硬座,在整个回家的计划中,同一辆车可以坐无限次,为了中途换车的
方便,如果在起点坐的是卧铺,则后面乘坐的车必须全是卧铺,同样的,如果在起点坐的是硬座,则后面乘坐的车必须全是硬座,假设一段(一辆车行程中,两相邻
城市间为一段)硬座的不舒适度是D1,一段卧铺的不舒适度是D2,求湫湫回家最小的不舒适度。
每组数据的第一行是2个正整数n和t,分别表示城市数和列车数;
接下来t行,每行一个字符串表示列车行程,字符串长度小于10000,每个字符串后跟一个整数k(k为0或1),之间用空格隔开;
接下来一行是D1,D2,其含义见题目描述;
最后一行是2个正整数A和B,表示起始和终点城市。
[Technical Specification]
1 <= Q <= 100
1 < n <= 200
1 < t <= 1000
0 < D1 <= 10000, 0 < D2 <= 10000,D1和D2的大小关系不确定
1 <= A, B <= n 且 A <> B
6 5
2+4+3+5+1+6 1
5+4+2+3+1 1
3+2+5+1+6 1
6+2 0
6+3+1+4+5+2 0
3 2
5 3
///构造两个图,一个是卧铺,一个是硬座
#include<stdio.h>
#include<string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF =;
const int N = ;
int graph[N][N],graph1[N][N]; ///graph 是卧铺,graph1是硬座
char str[];
int n,t,d1,d2;
void init()
{
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(i==j) graph[i][j] = ,graph1[i][j]=;
else graph[i][j] = INF,graph1[i][j]=INF;
}
}
}
bool vis[N];
int low[N];
int dijkstra(int s,int e,int g[][N])
{
for(int i=; i<=n; i++)
{
vis[i] = false;
low[i] = g[s][i];
}
vis[s] = true;
for(int i=; i<n; i++)
{
int MIN = INF;
for(int j=; j<=n; j++)
{
if(!vis[j]&&MIN>low[j])
{
MIN = low[j];
s = j;
}
}
vis[s] = true;
for(int j=; j<=n; j++)
{
if(!vis[j]&&low[j]>g[s][j]+low[s])
{
low[j] = g[s][j]+low[s];
}
}
}
return low[e];
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
scanf("%d%d",&n,&t);
init();
int v;
/*for(int i=1;i<=t;i++){
scanf("%s %d",str,&v);
int len = strlen(str);
int pre = str[0]-'0',now;
for(int j=2;j<len;j+=2){ ///错误代码!!!!!!我这样写比如说:'12'是取不到的!!!!
now = str[j]-'0';
if(v==1){
graph[pre][now] = 1;
graph1[pre][now] = 1;
}
else graph1[pre][now] = 1; ///为0时只构造graph1,graph不存在硬座
pre = now;
}
}*/
for(int i=; i<=t; i++)
{
scanf("%s %d",str,&v);
int len = strlen(str);
int K;
int pre = ;
int k = ;
while(str[k]!='+')
{
pre = pre*+str[k]-'';
k++;
}
for(int j=k+; j<len; j++)
{
int now = ;
while(j<len&&str[j]!='+')
{
now = now*+str[j]-'';
j++;
}
if(v==)
{
graph[pre][now] = ;
graph1[pre][now] = ;
}
else graph1[pre][now] = ; ///为0时只构造graph1,graph不存在硬座
pre = now;
}
}
scanf("%d%d",&d1,&d2);
int s,e;
scanf("%d%d",&s,&e);
int m1 = dijkstra(s,e,graph); ///卧铺的最小舒适度
int m2 = dijkstra(s,e,graph1);
if(m1>=INF&&m2>=INF) printf("-1\n");
else if(m1>=INF)
{
printf("%d\n",m2*d1);
}
else if(m2>=INF)
{
printf("%d\n",m1*d2);
}
else printf("%d\n",min(m1*d2,m2*d1));
}
return ;
} /*
6 4
3+4 1
4+2+6 0
3+2+1+6 1
3+1+5+2+6 0
3 2
5 6
*/
hdu 4522(图论,构图)的更多相关文章
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- HDU Today (图论)
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...
- HDU 4522 (恶心建图)
湫湫系列故事——过年回家 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 5025图论之BFS
点击打开链接 题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙.可是规定收集n之前,必须1~n-1所有收集完成,怪最多有5个 思路:怪最多就有5个,然后钥匙是1~9把,我们每 ...
- HDU 4522
DIJK,最短路,建两个图就好了. #include <cstdlib> #include <cstdio> #include <cstring> #include ...
- hdu 1045 Fire Net(最小覆盖点+构图(缩点))
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS Memory Limit:32768KB ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)
POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...
随机推荐
- 使用U盘给笔记本重做系统
**一.戴尔 Vostro 14 3000 Series **1. 开机时快速按F12进入BIOS界面 **2. 按照下图进行一系列的处理,把U盘被设置为第一启动项 **3. 插入U盘后进入老毛桃PE ...
- Flask初学者:session操作
cookie:是一种保存数据的格式,也可以看成是保存数据的一个“盒子”,服务器返回cookie给浏览器(由服务器产生),由浏览器保存在本地,下次再访问此服务器时浏览器就会自动将此cookie一起发送给 ...
- PSTR、LPSTR等宏原型
1.首先介绍char.wchar_t ,宽字符wchar_t和窄字符char. 窄字符char了,大家都很清楚,就是8bit表示的byte,长度固定.char字符只能表示ASII码表中的256个字符, ...
- 百度之星初赛A 今夕何夕
今夕何夕 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年 ...
- 笔记-python-standard library-12.1 pickle
笔记-python-standard library-12.1 pickle 1. pickle简介 source code: Lib/pickle.py pickle模块实质上是一个实现p ...
- Spring核心技术(十四)——ApplicationContext的额外功能
在前文的介绍中我们知道,org.springframework.beans.factory包提供了一些基本的功能来管理和控制Bean,甚至通过编程的方式来实现.org.springframework. ...
- 8 REST Framework 实现Web API 1
1 参考博客: http://blog.csdn.net/SVALBARDKSY/article/details/50548073 2 准备工作 1. 环境 Python: Python 3.5 D ...
- mysql 分组查询前n条数据
今天去面试,碰到一道面试题: 有一个学生成绩表,表中有 表id.学生名.学科.分数.学生id .查询每科学习最好的两名学生的信息: 建表sql: CREATE TABLE `stuscore` ( ` ...
- IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决
(此文为复制帖,原文地址为:http://blog.sina.com.cn/s/blog_a8192bdd0101af40.html) self.navigationController.naviga ...
- [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库
推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...