最短路。

先求出一个只包含最短路的$DAG$,然后在$DAG$上$dp$一下就可以了。英文变数字还有$map$转一下。

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<string>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std; int n,m,s,t,num[];
char tmp[],A[],B[]; map<string,int>xx;
map<int,string>yy; vector<int>G[],nG[];
int Time[][]; int disS[],disT[],f[]; int U[*],V[*],In[]; int ss[],pre[],sl[],dp[]; void spfaS()
{
memset(f,,sizeof f);
for(int i=;i<=n;i++) disS[i]=0x7FFFFFFF;
queue<int>Q; Q.push(s); f[s]=; disS[s]=; while(!Q.empty())
{
int h = Q.front(); Q.pop(); f[h]=;
for(int i=;i<G[h].size();i++)
{
int to = G[h][i];
if(disS[h]+Time[h][to]<disS[to])
{
disS[to] = disS[h]+Time[h][to];
if(f[to]==)
{
f[to]=;
Q.push(to);
}
}
}
}
} void spfaT()
{
memset(f,,sizeof f);
for(int i=;i<=n;i++) disT[i]=0x7FFFFFFF;
queue<int>Q; Q.push(t); f[t]=; disT[t]=; while(!Q.empty())
{
int h = Q.front(); Q.pop(); f[h]=;
for(int i=;i<G[h].size();i++)
{
int to = G[h][i];
if(disT[h]+Time[h][to]<disT[to])
{
disT[to] = disT[h]+Time[h][to];
if(f[to]==)
{
f[to]=;
Q.push(to);
}
}
}
}
} void W()
{
queue<int>Q; Q.push(s); dp[s]=; while(!Q.empty())
{
int h = Q.front(); Q.pop();
for(int i=;i<nG[h].size();i++)
{
int to = nG[h][i];
dp[to]+=dp[h];
if(sl[h]+>sl[to])
{
sl[to] = sl[h]+;
ss[to] = ss[h]+num[to];
pre[to]=h;
} else if(sl[h]+==sl[to])
{
if(ss[h]+num[to]>ss[to])
{
sl[to] = sl[h]+;
ss[to] = ss[h]+num[to];
pre[to]=h;
}
}
In[to]--;
if(In[to]==) Q.push(to);
}
}
} int main()
{
scanf("%d%d",&n,&m); scanf("%s%s",A,B); xx[A]=; yy[]=A;
for(int i=;i<=n;i++)
{
scanf("%s",tmp); xx[tmp]=i; yy[i]=tmp;
scanf("%d",&num[i]);
}
s=; t=xx[B]; for(int i=;i<=m;i++)
{
int P;
scanf("%s%s",A,B); scanf("%d",&P);
int u = xx[A], v = xx[B]; U[i] = u; V[i]=v;
Time[u][v]=Time[v][u]=P;
G[u].push_back(v);
G[v].push_back(u);
} spfaS(); spfaT(); for(int i=;i<=m;i++)
{
if(disS[U[i]]+disT[V[i]]+Time[U[i]][V[i]]==disS[t])
{
nG[U[i]].push_back(V[i]);
In[V[i]]++;
}
if(disS[V[i]]+disT[U[i]]+Time[U[i]][V[i]]==disS[t])
{
nG[V[i]].push_back(U[i]);
In[U[i]]++;
}
} W(); vector<int>Ans;
stack<int>St; int now=t;
while()
{
if(now==) break;
St.push(now);
now=pre[now];
} while(!St.empty())
{
Ans.push_back(St.top());
St.pop();
} for(int i=;i<Ans.size();i++)
{
cout<<yy[Ans[i]];
if(i<Ans.size()-) printf("->");
else printf("\n");
} printf("%d %d %d\n",dp[t],disS[t],ss[t]); return ;
}

PAT L3-011. 直捣黄龙的更多相关文章

  1. PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  2. PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)

    L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...

  3. pat 团体天梯 L3-011. 直捣黄龙

    L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...

  4. PAT天梯赛L3-011 直捣黄龙

    题目链接:点击打开链接 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求 ...

  5. PAT 01-1

    #include <stdio.h> int main() { int i; int k; ]; scanf("%d", &k); ; i < k; i+ ...

  6. PAT 05-树8 Huffman Codes

    以现在的生产力,是做不到一天一篇博客了.这题给我难得不行了,花了两天时间在PAT上还有测试点1没过,先写上吧.记录几个做题中的难点:1.本来比较WPL那块我是想用一个函数实现的,无奈我对传字符串数组无 ...

  7. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  8. PAT Judge

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...

  9. PAT/字符串处理习题集(二)

    B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...

随机推荐

  1. SpringMVC+MyBatis开发中指定callSettersOnNulls,可解决返回字段不全的问题

    Spring+MyBatis开发过程中,在xxMapper.xml配置文件进行select查询时resultType="map",如果要查询的字段是空值,在返回的map中会出现找不 ...

  2. 数据结构&图论:图

    在这里对图的存储和遍历进行一个规范,为以后更复杂的数据结构学习打下基础 首先是邻接矩阵的形式,适合于存稠密图,如果是全连接图就再合适不过了 int a[maxn][maxn]; 一个二维数组就可以搞定 ...

  3. [Luogu 1963] NOI2009 变换序列

    [Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也 ...

  4. Bzoj1312 / POJ3155 Neerc2006 Hard Life

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 459  Solved: 114 Description 在一家公司中,人事部经理与业务部经理不和.一次 ...

  5. 密码本(无bug版)

    main.cpp #include <stdio.h> #include <stdlib.h> #include "data.h" #include &qu ...

  6. JQGrid 导出Excel 获取筛选条件

    需求描述:页面加载后,进行相关数据搜索,要求点击导出按钮后  下载Excel文件. 思路:希望在点击[导出Excel]按钮时,获取到表格搜索时的filters内容. 在百度.api.jqgrid.js ...

  7. eureka服务端

    服务注册与发现——Eureka Eureka Server:服务的注册中心,负责维护注册的服务列表. Service Provider:服务提供方,作为一个Eureka Client,向Eureka ...

  8. 结合BeautyEye开源UI框架实现的较美观的Java桌面程序

    BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取.... 挺简单而且实用的一个项目,实现 ...

  9. 更新T1表,要添加一个条件A,但T1表没有A字段

    可以这样 如果T2表有A字段,T1.T2表有共同字段B,可以通过T2表A字段为条件查得B字段 再用B字段为条件去更新T1表 update T1 set C = '1' where B in(selec ...

  10. angular数据绑定---js全局学习

    <!DOCTYPE html> <html ng-app> <head> <title>Simple app</title> </he ...