Aizu - 2200 Mr. Rito Post Office

题意:/*你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,
你有一个当邮递员的好基友利腾桑遇到麻烦了:
全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处。
而且岛上只有一条船,下次想走水路还是得回到X处才行;
两个镇子之间可能有两条以上的水路或旱路;
邮递员必须按照清单上的镇子顺序送快递
(镇子可能重复,并且对于重复的镇子不允许一次性处理,比如ABCB的话B一定要按顺序走两次才行)。*/

思路:弗洛伊德求出弗洛伊德求出陆路,水路任意两点间的最短距离,然后动态规划求解。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#define MAXSIZE 1005
#define LL long long
#define INF 0x3f3f3f
using namespace std;

int lmap[MAXSIZE][MAXSIZE],smap[MAXSIZE][MAXSIZE],dp[MAXSIZE][MAXSIZE],q[MAXSIZE],n,m;

int solve()
{
    for(int k=1;k<=n;k++) //弗洛伊德求出陆路,水路任意两点间的最短距离
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                lmap[i][j] = min(lmap[i][j],lmap[i][k]+lmap[k][j]);
                smap[i][j] = min(smap[i][j],smap[i][k]+smap[k][j]);
            }
        }
    }
    dp[1][q[1]] = 0; //初始在第一个城市
    for(int i=1;i<=m;i++) //现在派送的城市
    {
        for(int j=1;j<=n;j++) //枚举船在那个城市
        {
            dp[i][j] = min(dp[i][j],dp[i-1][j]+lmap[q[i-1]][q[i]]);
            for(int k=1;k<=n;k++) //枚举把船停到那个城市
            {
                dp[i][k] = min(dp[i][k],dp[i-1][j]+lmap[q[i-1]][j]+smap[j][k]+lmap[k][q[i]]);
            }
        }
    }

    int minn = INF;
    for(int i=1;i<=n;i++)
    {
        if(minn > dp[m][i])
            minn = dp[m][i];
    }
    return minn;
}

void Init()
{
    for(int i=0;i<MAXSIZE;i++)
    {
        for(int j=0;j<MAXSIZE;j++)
        {
            if(i == j)
            {
                //dp[i][j] = 0;
                lmap[i][j] = 0;
                smap[i][j] = 0;
            }
            else
            {

                lmap[i][j] = INF;
                smap[i][j] = INF;
            }
            dp[i][j] = INF;
        }
    }
}

int main()
{
    char op[5];
    int u,v,w;
    while(scanf("%d%d",&n,&m),n+m)
    {
        Init();
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d%s",&u,&v,&w,op);
            if(op[0] == ‘L‘)
            {
                lmap[u][v] = lmap[v][u] = min(lmap[u][v],w);
            }

            else
            {
                smap[u][v] = smap[v][u] = min(smap[u][v],w);
            }
        }

        scanf("%d",&m);
        for(int i=1;i<=m;i++)
            scanf("%d",&q[i]);

        int ans = solve();

        printf("%d\n",ans);
    }
    return 0;
}

时间: 2024-07-28 17:16:53

Aizu - 2200 Mr. Rito Post Office的相关文章

挑战程序设计竞赛 2.5 它们其实都是“图”

[Summarize] 1.注意对图是否连通的判定 2.灵活运用边权取负的技巧 AOJ 0189:Convenient Location /* 给出一张无向图,现在求一个点,使得这个点到所有点的距离和最小 输出这个点的编号和距离和 */ #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=10,INF=0x3f3f3f3f; int n,d[

Aizu-2200-floyd+dp

Mr. Rito Post Office 你是一个为远程邮局邮局工作的程序员.你住的地区由几个岛屿组成.每个岛屿都有一个或多个港口城镇.除此之外,还有其他城镇和村庄.为了从一个岛到另一个岛,你必须使用一艘船.陆地道路可用于绕过一个岛屿,但使用海路可能会更快. 随着近年来邮局的私有化,邮政派遣员工的人事安排在全国范围内进行,以减少开支.远程邮局的邮局也不例外,因此,只有托伊先生成为邮差.由于邮局负责收集和交付的区域非常广泛,因此由一个人收集和分发是一项艰巨的工作.所以,Toi先生问你如何有效地做到

《进了外企再学英语2.职场精英篇》 Meeting

1. Starting Shall we start? Let's get started. Good morning, everyone. Thank you for participating in this meeting. I'm going to show you something really cool now. 2. Mangaging I don't wanna talk about it. Let's disregard what she says. Please conce

CNPC海外操作人员英语日常用语900句

一.Greetings 问候语1. Hello! / Hi! 你好!2. Good morning / afternoon / evening! 早晨(下午/晚上)好!3. I’m Kathy King. 我是凯西•金.4. Are you Peter Smith? 你是彼得•史密斯吗?5. Yes, I am. / No, I’m not. 是,我是./ 不,我不是.6. How are you? 你好吗?7. Fine, thanks. And you? 很好,谢谢,你呢?8. I’m fi

3、ACE-实用生活口语---讲打电话Talking on the phone

(3)需要留口信吗?请让他给我回电话Would you like to leave a message?May I take a message for you ?Please tell him to call me back.I'll call back later. (4)他不在,现在无法接电话,我可以给他留个口信吗?He's not available now.He is not in right now.Can I leave him a message? (5)他怎么联系您呢?结束谈话

words2

餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘caddy 茶罐dish 碟plate 盘saucer 小碟子rice bowl 饭碗chopsticks 筷子soup spoon 汤匙knife 餐刀cup 杯子glass 玻璃杯mug 马克杯picnic lunch 便当fruit plate 水果盘toothpick 牙签中餐:bear's

cs224d problem set2 (三) 用RNNLM模型实现Language Model,来预测下一个单词的出现

今天将的还是cs224d 的problem set2 的第三部分习题, 原来国外大学的系统难度真的如此之大,相比之下还是默默地再天朝继续搬砖吧 (注意前方高能,一大批天书即将来袭) ''' Created on 2017年9月26日 @author: weizhen ''' import getpass import sys import time import numpy as np from copy import deepcopy from utils import calculate_p

Office远程代码执行漏洞CVE-2017-0199复现

在刚刚结束的BlackHat2017黑帽大会上,最佳客户端安全漏洞奖颁给了CVE-2017-0199漏洞,这个漏洞是Office系列办公软件中的一个逻辑漏洞,和常规的内存破坏型漏洞不同,这类漏洞无需复杂的利用手法,直接就可以在office文档中运行任意的恶意脚本,使用起来稳定可靠,故而非常适合于漏洞学习新手测试调试使用,作为一个已经测试过该漏洞的新手,现将搭建环境和测试的全部过程呈献给大家,希望能对大家的学习有所帮助. CVE-2017-0199实际上包含两个漏洞,其中一个称为"RTF URL

如何用代码读取Office Online Server2016的文档的备注信息

前言 在一个项目上客户要求读取office online server 2016的对文档的备注信息,如下图: 以前思路老纠结在OOS这个在线上,总有以为这个信息存储在某个列表中,其实错了,这个备注信息其实就是word文档的备注信息,微软采用openxml开发的OOS,因此我也采用openxml读取备注信息的思路进行尝试,结果发现原来是可以的,成功效果图如下: 注意: OpenXml格式只有office2007以及以上版本才支持的格式,如果office97-2003格式的文档是二进制格式的文档,o