[CodeForces238E]Meeting Her(图论+记忆化搜索)
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(图论+记忆化搜索)的更多相关文章
- 非常完整的线性DP及记忆化搜索讲义
基础概念 我们之前的课程当中接触了最基础的动态规划. 动态规划最重要的就是找到一个状态和状态转移方程. 除此之外,动态规划问题分析中还有一些重要性质,如:重叠子问题.最优子结构.无后效性等. 最优子结 ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
- HDU1978 记忆化搜索
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- bzoj4562: [Haoi2016]食物链--记忆化搜索
这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...
随机推荐
- LotusScript_导出数据库路径和名称
对服务器有些数据库需要建立复本,新建拷贝,修改权限(ACL),或是修改数据库标识符(ID)需要找到这些数据库.这个方法是导出指定服务器上所有数据库的路径,数据库名,标识符等信息,导出后对Excel表格 ...
- Android基础Activity篇——Intent
1.显式的Intent intent是用来各各活动之间切换的,还可以用来传递参数. 项目还是使用之前创建的ActivityTest项目,这里新建一个活动SecondActivity.java,并且勾选 ...
- Django Field lookups (字段查找)
字段查找是指定SQL WHERE子句的核心内容的方式. 它们被指定为QuerySet方法filter().exclude()和get()的关键字参数. 1.exact:精确查找.如果为比较提供的值为N ...
- 动态原型模式 js
动态原型模式 function Person(name,age){ this.name = name; this.age = age; if(typeof this.sayName != " ...
- SQL SERVER 下:1、递归查询父分类下的各个子分类。 2、查询每个商品分类中最贵的前两个商品SQL
1.递归查询父分类下的各个子分类.表设计: SQL: --CTE 语句(适用于MSSQL2005以后版本) with cte_testNavi(Id,Name,Pid ) as ( --这是查询语句 ...
- C++11 新特性之 decltypekeyword
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lr982330245/article/details/30728131 decltypekeywor ...
- Kruskal算法求最小生成树(POJ2485)
题目链接:http://poj.org/problem?id=2485 #include <iostream> #include <stdio.h> #include < ...
- ORA-01262,oracle启动报错,及Oracle启动原理
错误状态: SQL> startup ORA-01261: Parameter db_recovery_file_dest destination string cannot be transl ...
- Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points
Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple ...
- Vuex基础-Mutation
借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. 代码结构: ...