爱情之路(codevs 2070)
yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆。
小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市。经过一条路ei需要耗费时间ti。此外,每条路均有一个特定标识,为’L’,’O’,’V’,’E’,中的某个字母。yh从1号城市出发,前往位于n号城市的小y所在处。
为了考验yh,小y规定,yh必须按照‘L’->’O’->’V’->’E’->’L’->’O’->’V’->’E’->.... 的顺序选择路,且所走的第一条路是’L’,最后一条路是’E’,每走完一个完整的’LOVE’算是通过一次考验
在不违背小y要求的前提下,yh想花费最少的时间到达小y的所在地,同在此时间内完成最多次考验。你能帮yh算出,他最少要花多久到达城市n,完成多少次考验呢?
第一行为两个整数n,m表示有n个城市,m条双向路。
第2行到第m+1行,每行有3个整数x,y,t和一个字符char,城市x,y之间有路,通过这条路花费的时间为t,这条路的特殊标志为 char。
输出1行,两个整数表示yh到达城市n花费的最少时间和该时间内通过的最多次考验数,如果不能到达则输出’HOLY SHIT!’
【样例输入1】
4 4
1 2 1 L
2 1 1 O
1 3 1 V
3 4 1 E
【样例输入2】
4 4
1 2 1 L
2 3 1 O
3 4 1 V
4 1 1 E
【样例输出1】
4 1
【样例输出2】
HOLY SHIT!
对于100%数据,1≤n≤1314,0≤M≤13520
/*
求最短路径,不过多加一维表示走到该点时的字母
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define N 1500
using namespace std;
int head[N],f[N][],c[N][],vis[N][],n,m;
struct node
{
int v,pre,t,flag;
};node e[N*];
struct Node
{
int num,fl;
};
void add(int i,int x,int y,int z,int fl)
{
e[i].v=y;
e[i].t=z;
e[i].flag=fl;
e[i].pre=head[x];
head[x]=i;
}
void spfa()
{
memset(f,0x3f3f3f3f,sizeof(f));
queue<Node> q;
Node a;a.num=;a.fl=;
q.push(a);vis[][]=;f[][]=;
while(!q.empty())
{
Node x=q.front();vis[x.num][x.fl]=;q.pop();
for(int i=head[x.num];i;i=e[i].pre)
if((e[i].flag==(x.fl%+))&&f[e[i].v][e[i].flag]>=f[x.num][x.fl]+e[i].t)//因为要求考验次数最多,所以是“>=”,被坑了好长时间
{
f[e[i].v][e[i].flag]=f[x.num][x.fl]+e[i].t;
c[e[i].v][e[i].flag]=c[x.num][x.fl]+;
if(!vis[e[i].v][e[i].flag])
{
vis[e[i].v][e[i].flag]=;
Node y;y.num=e[i].v;y.fl=e[i].flag;
q.push(y);
}
}
}
if(f[n][]!=0x3f3f3f3f)printf("%d %d",f[n][],c[n][]/);
else printf("HOLY SHIT!");
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y,z,fl;char c;
scanf("%d%d%d",&x,&y,&z);cin>>c;
if(c=='L')fl=;if(c=='O')fl=;if(c=='V')fl=;if(c=='E')fl=;
add(i*-,x,y,z,fl);add(i*,y,x,z,fl);
}
spfa();
return ;
}
爱情之路(codevs 2070)的更多相关文章
- AC日记——爱情之路 codevs 2070
2070 爱情之路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description yh非常想念他的女朋友小y,于是他 ...
- [codevs2070]爱情之路
[codevs2070]爱情之路 试题描述 yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆. 小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市.经过一条路ei需要耗费时间 ...
- it喜爱的歌词
1.曼丽 我们的过去我们的情义怎么能忘记 #曼丽你怎么这样忍心静静的就离去 #我很伤心从今以后不能够见到你 #只有留下你往日的情景使我常回忆 #一样的青山一样的绿水只有我和你 #曼丽可记得我们时常快 ...
- CODEVS 1817 灾后重建 Label:Floyd || 最短瓶颈路
描述 灾后重建(rebuild) B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...
- [ CodeVS冲杯之路 ] P1368
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1368/ 嗯……泡泡堂,很劲啊,其实就是个盗版的田忌赛马 http://www.cnblogs.com/hyfer/p/ ...
- [ CodeVS冲杯之路 ] P1092
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1092/ 嗯,这道题有一定难度啊,需要先用扩展欧几里得算法求出逆元,然后按照大小构一颗带边权为小时数的树 树链剖分后在树 ...
- [ CodeVS冲杯之路 ] P3955
不充钱,你怎么AC? 题目:http://codevs.cn/problem/3955/ 最长上升子序列的加强版,n 有1000000,n 方的 DP 肯定会 TLE,那么用二分栈维护 二分栈我讲不好 ...
- [ CodeVS冲杯之路 ] P1165
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1165/ 题目很简单,代码最好写朴实一点,不要想着哪些情况可以合并在一起啊等等 老老实实一个个判断,不然很容易出错 细节 ...
- [ CodeVS冲杯之路 ] P1053
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1053/ 直接扫一遍串,把字母对应的 ascii 码直接做数组下标,交给数组统计 最后查询一遍数组的 'a'-'z' , ...
随机推荐
- PL/0编译器(java version) - Interpreter.java
1: package compiler; 2: 3: import java.io.BufferedReader; 4: import java.io.BufferedWriter; 5: imp ...
- tp框架做留言板
首先是登录的LoginController.class.php 代码内容是 <?php namespace Admin\Controller; use Think\Controller; cla ...
- javascript 的button onclick事件不起作用的解决方法
在项目中遇到个问题:servlet向前端返回如下按钮,当course_ID为数字是onclick事件正常,但当course_ID含有字母时onclick事件就不起作用.网上找了很多方法都不管用,最后自 ...
- C文件操作(全)
引用自:http://www.cnblogs.com/whiteyun/archive/2009/08/08/1541822.html 文件 文件的基本概念 所谓“文件”是指一组相关数据的有序集合. ...
- hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
解题思路: 一只母猪生下第二头后立马被杀掉,可以这样想即,生下第二头便被杀掉,可以看成母猪数量没变 第一天 1 第二天 2 第三天 3 :第一头生第二头后杀掉还是1头,第二头再加上第二头生下的,一共三 ...
- xss实例-什么都没过滤的情况
1. XSS的存在,一定是伴随着输入,与输出2个概念的. 2. 要想过滤掉XSS,你可以在输入层面过滤,也可以在输出层面过滤. 3. 如果输入和输出都没过滤. 那么漏洞将是显而易见的. 4. 作为第一 ...
- Mongodb For C# "Query" 对象常用的方法
Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.In("name", & ...
- 自定义 SqlHelp
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Data; usin ...
- UML(5)——协作图
协作图中表示了角色之间的关系,通过协作图限定协作中的对象或链.协作指的是在一定的语境中一组对象以及实现某些行为的对象间的相互作用. 协 作图是表现对象协作关系的图,表示了协作中作为各种类元角色的对象所 ...
- (转)DoDataExchange执行时机
void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...