Description

题目链接:Codeforces

Solution

因为路线随机,所以找出各路线最短路必须经过的点,在这个点必定能上车

直接floyd暴力找割点

然后不断用k条公交车路线来更新DP答案,直到更新不了为止,dp[i]表示从点i到终点的答案

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 1100
using namespace std; int n,m,g[N][N],S,T,s[N],t[N],dp[N],cnt[N],Ans[N];
bool cut[N][N],vis[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} int dfs(int u,int cur){
if(vis[u]) return dp[u];
vis[u]=1;int tmp=-1;
for(int v=1;v<=n;++v)
if(g[u][v]==1&&g[u][t[cur]]==g[v][t[cur]]+1)
tmp=max(tmp,dfs(v,cur));
if(tmp==-1) tmp=1e9;
tmp=min(tmp,Ans[u]);
return dp[u]=tmp;
} int main(){
n=read(),m=read(),S=read(),T=read();
memset(g,0x3f,sizeof(g));
for(int i=1;i<=n;++i)g[i][i]=0;//注意自己到自己初始化为0
while(m--){
int u=read(),v=read();
g[u][v]=1;//有向图
}
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
m=read();
for(int k=1;k<=m;++k){
s[k]=read(),t[k]=read();
if(g[s[k]][t[k]]==0x3f3f3f3f)continue;//这里不特判会RE
for(int i=1;i<=n;++i)
if(g[s[k]][i]+g[i][t[k]]==g[s[k]][t[k]])
cnt[g[s[k]][i]]++;
for(int i=1;i<=n;++i)
if(g[s[k]][i]+g[i][t[k]]==g[s[k]][t[k]]){
if(cnt[g[s[k]][i]]==1) cut[k][i]=1;
cnt[g[s[k]][i]]=0;
}
} bool flag=1;
memset(dp,0x3f,sizeof(dp));
memset(Ans,0x3f,sizeof(Ans));
Ans[T]=0;
while(flag){
flag=0;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(cut[i][j]){
memset(vis,0,sizeof(vis));
int tmp=dfs(j,i)+1;
if(Ans[j]>tmp){
flag=1;
Ans[j]=tmp;
}
}
}
if(Ans[S]>233) Ans[S]=-1;
printf("%d\n",Ans[S]);
return 0;
}

[CodeForces238E]Meeting Her(图论+记忆化搜索)的更多相关文章

  1. 非常完整的线性DP及记忆化搜索讲义

    基础概念 我们之前的课程当中接触了最基础的动态规划. 动态规划最重要的就是找到一个状态和状态转移方程. 除此之外,动态规划问题分析中还有一些重要性质,如:重叠子问题.最优子结构.无后效性等. 最优子结 ...

  2. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  3. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  4. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  6. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

  7. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  8. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. bzoj4562: [Haoi2016]食物链--记忆化搜索

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

随机推荐

  1. RN的打包

    1.首先执行以下命令 在android目录下 keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -key ...

  2. Web前端开发规范(二)

    3.HTML代码规范 .html文件必须存放在项目工程约定的目录中. .html文件的命名:以模块 + 功能的结合方式来命名,比如:newsList.html. 文档类型声明:HTML4中使用< ...

  3. 使用C#实现计划任务(corn job)

    维基百科上是这样描述计划任务的: “Cron is a time-based job scheduler in Unix-like computer operating systems. Cron i ...

  4. vos2009如何设置客户自助密码

    1.  VOS2009 账户管理——>网关管理——>密码:就是客户的自助登陆密码 2.  VOS3000 Vos3000里配置密码和自助密码分开 3.  登陆测试 浏览器输入http:// ...

  5. jQuery-prepend、append、before、after的区别

    举例说明,原始html代码如下: <ol> <li>List item 1</li> <li>List item 2</li> <li ...

  6. 笨办法学Python(二十八)

    习题 28: 布尔表达式练习 上一节你学到的逻辑组合的正式名称是“布尔逻辑表达式(boolean logic expression)”.在编程中,布尔逻辑可以说是无处不在.它们是计算机运算的基础和重要 ...

  7. 0 - python简介

    Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  8. MySQL入门很简单: 14MySQL日志

    二进制日志: 以二进制文件的形式记录了数据库中的操作,但不记录查询语句 错误日志: 记录MySQL服务器的启动,关闭和运行错误等信息 通用查询日志: 记录用户登录和记录查询的信息 慢查询日志: 记录执 ...

  9. Altium_Designer-PCB中各层作用详解

    一直以来,对PCB中各层,比如:solder层.paste层.Top overlay层等等这些一知半解.今天仔细看了下,向大家介绍一下,有不对的地方还请指正. 1.mechanical机械层是定义整个 ...

  10. The service command supports only basic LSB actions (start, stop, restart, try-restart, reload,force-reload, status)

    # service iptables save The service command supports only basic LSB actions (start, stop, restart, t ...