luogu P2009 跑步

原题链接:https://www.luogu.org/problem/show?pid=2009

做这道题的时候,看了一眼数据范围,n<=20,额,一般的Floyd不应该是100—200左右的吗,这个不会是有什么其他算法吧。。。

仔细审题后,好像没啥问题,直接字符转数字,Floyd直接上,然后就华丽的GG了,50分。

因为此题有可能有自环,而且每条边都只要最大值,于是就在前面加了一个特判边权不为无限大的时候,就取最大值。

然而还是不对,仔细看了半天,没看出错来,把手打的一串9改成常量inf后,居然A了,事后才发现,填数组的时候有8个9,判断的时候只输入了7个9。。。。。。

总体算法不难,注意好一些细节,就是个Floyd板子题

#include<cstdio>
const int inf=9999999;
int e[25][25],w,n,m;
char s[5],t[5];
int max(int x,int y)
{
    return x>y ? x : y;
}
int min(int x,int y)
{
    return x<y ? x : y;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i!=j) e[i][j]=inf;
        }
    }
    for(int i=1;i<n;i++)
    {
        scanf("%d",&e[i][i+1]);
        e[i+1][i]=e[i][i+1];
    }
    scanf("%d",&e[n][1]);e[1][n]=e[n][1];
    for(int i=1;i<=m;i++)
    {
        scanf("%s %s %d",s,t,&w);
        int x=s[0]-‘A‘+1,y=t[0]-‘A‘+1;
        if(e[x][y]!=inf) e[x][y]=max(e[x][y],w);
        else e[x][y]=w;
        e[y][x]=e[x][y];
    }
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
                e[j][i]=e[i][j];
            }
        }
    }
    scanf("%s %s",s,t);
    int x=s[0]-‘A‘+1,y=t[0]-‘A‘+1;
    printf("%d",e[x][y]);
    return 0;
}
时间: 2024-10-24 10:10:54

luogu P2009 跑步的相关文章

洛谷 P2009 跑步

P2009 跑步 题目背景 跑步是一项有意思的运动,尤其是可以开发人的脑筋.常神牛很喜欢跑步. 题目描述 常神牛跑步的场地是一个多边形(边数≤20,每个顶点用英文大写字母表示),并且在这个多边形内部,还会有一些小道,连接两个不相邻的顶点.所有的边长和小道都是双向通行的举例来说,下面一个图: 假设常神牛从A点跑到D点,最短的路径是A-E-D(长度为6). 现在告诉你多边形的边数n,多边形每条边的长度,多边形内的连线数k,每条连线的两个端点及长度,以及起始点和结束点,请你输出最短路径的长度.但是常神

做题单

错误 收藏了过多题目 QWQ P1383 高级打字机 P1270 “访问”美术馆 P1481 魔族密码 P1280 尼克的任务 P1271 聚会的快乐 P3631 [APIO2011]方格染色 P1243 排序集合 P2858 [USACO06FEB]奶牛零食Treats for the Cows P3146 [USACO16OPEN]248 P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome P1896 [SCOI2005]互不侵犯 P3154 [CQOI2

[luogu]P1600 天天爱跑步[LCA]

[luogu]P1600 [NOIP 2016]天天爱跑步 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含n个结点和n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从1到n的连续正整数. 现在有m个玩家,第i个玩家的起点为Si?,终点为Ti? .每天打卡任务开始时,所有玩家在第0秒同时从自己的起点出发, 以每秒跑一条边的速

Luogu P1600 天天爱跑步 树上差分

Luogu P1600 天天爱跑步 ### 树上差分 题目链接 树上问题 没看出怎么差分 被观察到的条件有两个 lca前一半(包括lca) \(d[S_i]-d[x]=w[x]\) \(d[i]\)表示节点深度 lca后一半 \(d[S_i]+d[x]-2*d[lca(S_i,T_i)]=w[x]\) 但是具体怎么实现这个公式?? 实现 \(d[S_i]=w[x]+d[x]\) 可以转化为线段树合并模型 在\(S_i\)到\(lca\)的路径上增加\(d[S_i]\)的价值 最后求出各点的\(w

luogu P1353 [USACO08JAN]跑步Running

题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ≤ N ≤ 10,000) minutes. During each minute, she can choose to either run or rest for the whole minute. The ultimate distance Bessie runs, though, depe

[Luogu] 天天爱跑步

https://www.luogu.org/problemnew/show/P1600 乱写的暴力,这道题暴力写个60还是比较简单的 #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <map> #include <vector> #include <cstring> using namespace st

luogu P1600 天天爱跑步 |树上差分+LCA

题目描述 小c 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nnn 个结点和 n?1n-1n?1 条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 111 到 nnn 的连续正整数. 现在有 mmm 个玩家,第 iii 个玩家的起点为 sis_isi?,终点为 tit_iti?.每天打卡任务开始时,所有玩家在第 000 秒同时

luogu P3799 妖梦拼木棒

二次联通门 : luogu P3799 妖梦拼木棒 /* luogu P3799 妖梦拼木棒 用一个桶存下所有的木棒 美剧两根短的木棒长度 后随便乘一乘就 好了.. */ #include <algorithm> #include <cstdio> #define Mod 1000000007 #define Max 5000 void read (int &now) { now = 0; register char word = getchar (); while (wo

[luogu P1967][NOIp2013]P1967 货车运输

题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入输出格式 输入格式: 输入文件名为 truck.in. 输入文件第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道 路. 接下来 m 行每行 3 个整数 x. y. z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z