【神题】URAL 1575 Yekaterinburg Subway 2

点击打开链接

神题啊啊啊啊啊啊啊啊啊

看图建最短路

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <set>
#include <vector>
#include <deque>
#include <map>
#define cler(arr, val)    memset(arr, val, sizeof(arr))
typedef long long  LL;
const int MAXN = 120000;
const int MAXM = 140000;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
#define lson l,m,rt<<1
#define rson m+1n 0;,r,rt<<1|1
char s[71][40]=
{
    "7_klyuchey",
    "Sortirovochnaya",
    "China_town",
    "Zarechny",
    "Zelyony_ostrov",
    "Tatishchevskaya",
    "Verh_Isetskaya",
    "Kommunarov_square",
    "City",
    "Zvezda",
    "I_Pyatiletki_square",
    "Pobedy",
    "Bakinskih_Komissarov",
    "Prospekt_Kosmonavtov",
    "Uralmash",
    "Mashinostroiteley",
    "Taganskaya",
    "Elmash",
    "Turbinnaya",
    "Kalinovskaya",
    "Italyanskaya",
    "Ozyornaya",
    "Shefskaya",
    "Komsomolskaya",
    "Vilonovskaya",
    "Pionerskaya",
    "Uralskaya",
    "Dinamo",
    "Shevchenko",
    "Gagarinskaya",
    "Moskovskaya",
    "Vostochnaya",
    "Vtuzgorodok",
    "Kamennye_palatki",
    "University",
    "1905_year_square",
    "Teatralnaya",
    "Kuybyshevskaya",
    "Geologicheskaya",
    "Posadskaya",
    "Central_stadium",
    "Kraulya",
    "Metallurgov",
    "MEGA",
    "Volgogradskaya",
    "Yugo_zapadnaya",
    "Akademicheskaya",
    "Aviatsionnaya",
    "Dvorets_sporta",
    "Voennaya",
    "Sovhoznaya",
    "Bazhovskaya",
    "Chkalovskaya",
    "Botanicheskaya",
    "Samolyotnaya",
    "Vtorchermet",
    "Keramicheskaya",
    "Himmash",
    "Nizhne_Isetskaya",
    "Uktusskie_Gory",
    "Shcherbakovskaya",
    "Parkovaya",
    "Mayakovskaya",
    "Oborony_square",
    "Sibirskaya",
    "Siniye_kamni",
    "Lechebnaya",
    "Varshavskaya",
    "Kompressornaya",
    "Koltsovo"
};
int mp[88][88];
void init()
{
    for(int i=0; i<=70; i++)
    {

        for(int j=0; j<=70; j++)
            mp[i][j]=INF;
        mp[i][i]=0;
    }
    mp[1][2]=mp[2][1]=1;
    mp[3][2]=mp[2][3]=1;
    mp[3][4]=mp[4][3]=1;
    mp[9][4]=mp[4][9]=1;
    mp[5][6]=mp[6][5]=1;
    mp[7][6]=mp[6][7]=1;
    mp[7][8]=mp[8][7]=1;
    mp[9][8]=mp[8][9]=1;
    mp[9][27]=mp[27][9]=1;
    mp[8][31]=mp[31][8]=1;
    mp[8][36]=mp[36][8]=1;
    mp[12][11]=mp[11][12]=1;
    mp[10][11]=mp[11][10]=1;
    mp[10][27]=mp[27][10]=1;
    mp[28][27]=mp[27][28]=1;
    mp[26][27]=mp[27][26]=1;
    mp[29][27]=mp[27][29]=1;
    mp[26][29]=mp[29][26]=1;
    mp[26][19]=mp[19][26]=1;
    mp[18][19]=mp[19][18]=1;
    mp[18][17]=mp[17][18]=1;
    mp[13][14]=mp[14][13]=1;
    mp[15][14]=mp[14][15]=1;
    mp[15][16]=mp[16][15]=1;
    mp[16][27]=mp[27][16]=1;
    mp[26][30]=mp[30][26]=1;
    mp[25][30]=mp[30][25]=1;
    mp[24][30]=mp[30][24]=1;
    mp[24][23]=mp[23][24]=1;
    mp[22][23]=mp[23][22]=1;
    mp[22][21]=mp[21][22]=1;
    mp[21][20]=mp[20][21]=1;
    
    
    mp[28][36]=mp[36][28]=1;
    mp[29][36]=mp[36][29]=1;
    mp[37][36]=mp[36][37]=1;
    mp[31][36]=mp[36][31]=1;
    mp[31][41]=mp[41][31]=1;
    
    mp[42][41]=mp[41][42]=1;
    mp[42][43]=mp[43][42]=1;
    mp[44][43]=mp[43][44]=1;
    mp[31][40]=mp[40][31]=1;
    mp[45][40]=mp[40][45]=1;
    mp[45][46]=mp[46][45]=1;
    mp[47][46]=mp[46][47]=1;
    mp[49][40]=mp[40][49]=1;
    mp[49][39]=mp[39][49]=1;
    
    mp[36][39]=mp[39][36]=1;
    mp[36][38]=mp[38][36]=1;
    mp[37][39]=mp[39][37]=1;
    mp[38][39]=mp[39][38]=1;
    mp[37][39]=mp[39][37]=1;
    mp[37][29]=mp[29][37]=1;
    mp[37][32]=mp[32][37]=1;
    mp[33][32]=mp[32][33]=1;
    mp[33][34]=mp[34][33]=1;
    mp[35][34]=mp[34][35]=1;
    mp[33][65]=mp[65][33]=1;
    mp[38][64]=mp[64][38]=1;
    mp[38][65]=mp[65][38]=1;
    mp[66][65]=mp[65][66]=1;
    mp[66][67]=mp[67][66]=1;
    mp[68][67]=mp[67][68]=1;
    mp[68][69]=mp[69][68]=1;
    mp[70][69]=mp[69][70]=1;
    mp[65][64]=mp[64][65]=1;
    mp[39][52]=mp[52][39]=1;
    mp[49][52]=mp[52][49]=1;
    mp[49][48]=mp[48][49]=1;
    mp[50][48]=mp[48][50]=1;
    mp[50][51]=mp[51][50]=1;
    mp[52][53]=mp[53][52]=1;
    mp[52][64]=mp[64][52]=1;
    mp[54][53]=mp[53][54]=1;
    mp[54][55]=mp[55][54]=1;
    mp[56][55]=mp[55][56]=1;
    mp[56][57]=mp[57][56]=1;
    mp[54][61]=mp[61][54]=1;
    mp[54][62]=mp[62][54]=1;

    mp[60][61]=mp[61][60]=1;
    mp[63][62]=mp[62][63]=1;
    mp[63][64]=mp[64][63]=1;
    mp[60][59]=mp[59][60]=1;
    mp[58][59]=mp[59][58]=1;
    mp[38][32]=mp[32][38]=1;
    mp[32][30]=mp[30][32]=1;
    mp[40][39]=mp[39][40]=1;
    mp[9][36]=mp[36][9]=1;
    
    mp[52][64]=mp[64][52]=1;
    
    mp[37][38]=mp[38][37]=1;
    mp[37][30]=mp[30][37]=1;
    mp[33][30]=mp[30][33]=1;
    for(int k=1; k<=70; k++)
        for(int i=1; i<=70; i++)
            for(int j=1; j<=70; j++)
                mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
}
int main()
{
    init();
    int n;
    cin>>n;
    while(n--)
    {
        int n1,n2;
        string s1,s2;
        cin>>s1>>s2;
        for(int i=0; i<70; i++)
        {
            if(s1==s[i])
                n1=i;
            if(s2==s[i])
                n2=i;
        }
        n1++;
        n2++;
        cout<<mp[n1][n2]<<endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值