爱情之路

【题目描述】

有n(n <= 1314)个城市和m(m <= 13520)条双向公路,每条公路连接着一个或两个城市,通过一条公路需要耗费时间,且每条公路均有一个特定标识“L”、“O”、“V”、“E”。

小Y从1号城市出发,需要前往n号城市,他必须按照“L” --> “O” --> “V” --> “E” --> “L” --> “O” --> “V” --> “E” --> ······的顺序选择公路,且其所走的第一条公路为“L”,最后一条公路为“E”,每走完一个完整的“LOVE”就算通过了一次考验。

现询问小Y耗费的最少时间是多少,以及在该时间内最多能够通过多少次考验。

【输入描述】

第一行输入两个整数n、m,表示城市数目和公路数目;

接下来m行,每行输入三个整数X、Y、T和一个字符,表示城市X、Y之间存在一条公路,通过这条公路需耗费时间T,及其特殊标志。

【输出描述】

输出两个整数,分别表示耗费最少的时间,以及在该时间内能够通过的最多的考验次数,如果不能到达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!

源代码:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct Node
{
    int T,S,T1,T2;
}i[27051]; //两倍。
queue <int> Q;
int n,m,Head[1315],Next[13521],dis[1315][4],Road[1315][4];
bool Vis[1315]={0};
void SPFA() //SPFA快忘掉了。
{
    memset(dis,0x3f,sizeof(dis)); //dis[i][j]表示走到节点i,且后续字母编号应为j的最短路数值。
    Q.push(1);
    Vis[1]=true; //是否在队列之中。
    dis[1][3]=0;
    bool Flag(0);
    while (!Q.empty())
    {
        int t=Q.front();
        Q.pop();
        Vis[t]=false;
        for (int a=Head[t];a;a=Next[a]) //遍历此点的边。
        {
            int T=i[a].T2;
            if (dis[t][(i[a].T+3)%4]==0x3f) //字母不符条件。
              continue;
            if (dis[t][(i[a].T+3)%4]+i[a].S==dis[T][i[a].T]) //最短路数值相等。
            {
                if (i[a].T==3)
                  Road[T][3]=max(Road[t][2]+1,Road[T][3]); //Road[i][j]表示走到节点i,且此节点字母编号为j的最多考验数值。
                else
                  Road[T][i[a].T]=max(Road[T][i[a].T],Road[t][(i[a].T+3)%4]);
            }
            if (dis[t][(i[a].T+3)%4]+i[a].S<dis[T][i[a].T]) //更新最短路。
            {
                if (i[a].T==3)
                  Road[T][3]=Road[t][2]+1;
                else
                  Road[T][i[a].T]=Road[t][(i[a].T+3)%4];
                dis[T][i[a].T]=dis[t][(i[a].T+3)%4]+i[a].S;
                if (!Vis[T])
                {
                    Q.push(T); //入队。
                    Vis[T]=true;
/* 判断负环,但在本题中没有必要。
                    Sum[T]++;
                    if (Sum[T]>n) //入队的次数大于节点总数,肯定就是陷入死循环了。
                      return;
*/
                }
            }
        }
        if (n==1&&!Flag) //自环,因为前面已经把dis[1][3]赋值为0,暴力判断并修改一次即可。
        {
            Flag=true;
            dis[1][3]=0x3f;
        }
    }
}
void Init() //类似于边表,只不过边表是按Num++序,但此数据结构直接跳到了边数之外。
{
    for (int a=1;a<=m;a++)
    {
        char t;
        scanf("%d%d%d",&i[a].T1,&i[a].T2,&i[a].S);
        scanf(" %c",&t); //新字符读入方式get√。
        if (t==‘L‘)
          i[a].T=0;
        if (t==‘O‘)
          i[a].T=1;
        if (t==‘V‘)
          i[a].T=2;
        if (t==‘E‘)
          i[a].T=3;
        Next[a]=Head[i[a].T1]; //Next[]存储的是此节点的上一条边的编号。
        Head[i[a].T1]=a; //Head[]存储的是该条边的编号,为下一条边的处理做准备。
        i[a+m].T1=i[a].T2; //无向边就是两条有向边。
        i[a+m].T2=i[a].T1;
        i[a+m].S=i[a].S;
        i[a+m].T=i[a].T;
        Next[a+m]=Head[i[a+m].T1]; //同理于上。
        Head[i[a+m].T1]=a+m;
    }
}
int main() //这道题目叙述有意思啊。
{
    scanf("%d%d",&n,&m);
    Init();
    SPFA();
    if (dis[n][3]==0x3f) //无法得出答案。
      printf("HOLY SHIT!");
    else
      printf("%d %d",dis[n][3],Road[n][3]);
    return 0;
}
时间: 2024-09-28 01:24:16

爱情之路的相关文章

AC日记——爱情之路 codevs 2070

2070 爱情之路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆. 小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市.经过一条路ei需要耗费时间ti.此外,每条路均有一个特定标识,为’L’,’O’,’V’,’E’,中的某个字母.yh从1号城市出发,前往位于n号城市的小y所在处. 为了考验yh,小y规定,yh必须按照‘L’->’O’->’

[codevs2070]爱情之路

试题描述 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'->.... 的顺序选择路,且所走的第一条路是'

信那些让你该相信的事情

在恋爱或者生活的时候,是否有些让你难以抉择?比如恋爱的时候,ta是是不是爱我?这件事我该不该相信?其实一切都很简单. 一对情侣,男的总是不担心女的交际问题,平时女和其他男生走得较近的时候,他总是一副无所谓,放你去吧的样子,于是女的开始怀疑,告诉闺蜜. 直到有一天战争爆发了,女的说是不是不爱我,是不是想和我没关系?男的却回答,我很相信你,不会变心,所以才放任你的. 其实,没什么好多想的,你既然喜欢ta,那么就应该信任ta,而不是猜疑.当你完全信任ta你就不会这么多疑. 当你想的时候,告诉哪边好就往

阿甘正传&mdash;&mdash;影评

第一次看<阿甘正传>的时候,惊叹于影片情节与美国众多历史事件的惊人巧合,妒忌弱智的阿甘接连不断的好运气,对珍妮的频繁出走感到不解,为阿甘执着的爱情所感动.    后来发现香港明珠台重放次数最多的恐怕要数<阿甘正传>了,央视六频道也经常重播,昨晚也播了,每次重看,我都会陷入一种油然而生的感动中,有时候即使不看影片,开头及结尾的音乐一旦响起,总会产生一种莫名奇妙的感动. <阿甘正传>原著小说跟影片基本是两码事,导演对原著小说的改编非常坚决,几乎全盘推倒,重新来过.原著小说中

刘宇凡:海子,一个孤独的灵魂诗人

刘宇凡:海子,一个孤独的灵魂诗人 上 星期天总算没有宅在家里睡觉,夹着没有太阳的阳光心情,来到了一家24小时不打烊的书店(1200bookshop,广州的朋友喜欢看书的可以去逛逛), 一直以来都想寻找一家有特色的书店,这家书店还算是很不错的,不大,很温馨,很舒适,有沙发,有水吧,有休息的小房间.我来到后先逛了一圈,发现经典书籍 偏少,我竟然没有看到鲁迅.胡适.林语堂.三毛.木心.茅盾.郁达夫等这些人的书籍,也没有看到有相关现代史的书籍,不过介绍台湾历史的书籍还是比较全 的,关于台湾历史我还是很感

刘宇凡:我是一只特立独行的猪

我是一只特立独行的猪 世界是如此的小 我们注定无处可逃 当我尝尽人情冷暖 当你决定为了你的理想燃烧 生活的压力与生命的尊严 哪一个重要? 一曲李宗盛的[我是一只小小小鸟]把我拉入了回忆的角色,回顾2014年的所作所为,简直就是痛定思痛啊. 每每看到许多人写总结都带有反省.后悔.痛苦.无奈.悲伤时.我就开心极了,因为看到这么多人都过得不如意,我心理就平衡许多了,哈哈哈哈...... 2014年,一个成长之年! 生来空空,死亦匆匆. 时光带走了流年,岁月摧残了青春.年复年,艰复艰.酒杯装满的不是孤独

10.27--11.3 一周刷题记录

exgcd 贝祖定理推广 贝祖定理可以推广到n个,n>=2 ax+by+cz+...=k if(k%gcd(a,b,c,...)==0) 该式子有整数解 else 没有整数解 Forsaken喜欢数论 因为空间限制,直接省略掉sum数组 记得sum 开long long! int n; const int N=3e7+10; int v[N],p[N],tot_p; long long sum; inline void shai(){ rep(i,2,n){ if(v[i]==0){ v[i]=

克最通月值得白真员工存段况外引dsym

家卫生健康委员会卫生应急办公室组织编制了公民卫生应急素养条目,并在"4·15全民国家安全教育日"发布.条目共12条,涉及突发公共卫生事件应对,突发事件紧急医学救援.中毒及核和辐射应急处置等基本知识和要求.期望通过发布公民卫生应急素养条目,进一步提高民众卫生应急素养,推进卫生应急社会参与工作,切实维护公民生命安全和身体健康. http://weibo.com/p2018_04_18.Pp/230927981149922743777879派褐麓记杂XWO琶追斡晾 http://weibo.

《情商-把妹-恋爱心理学大全集》----程序员的爱情修炼之路

资源链接:https://pan.baidu.com/s/1GYOtato6Pu6kMvgWhpc3jw对于程序员来讲,除了代码最难懂的就是恋爱了吧.为什么她要和我分手?...我已经道歉了啊?...我哪里做错了?...道理我都懂,可是...那今天就分享一波书籍,共52本,教会你如何获得爱情,让爱情保鲜:如何学会表达感情.情绪.爱意等等...同时也分享三大视频课程<精致女生必备形象管理课>视频课程.<男士个人形象VIP班>视频课程.<女神解码>视频课程,内外兼修.面对代码