http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834

从点1出发,假设现在在i,点数为sta,则下一步的点数必然不能是sta的因数,所以不会形成环,只需从1直接走,走到n即可.

但是如果这样的话时空复杂度就都是nk,明显不满足题意,而这个时候我们可以想到,每个状态都必然是k的约数,(点数不是k的约数的节点不在路上,可以无视),而约数的个数也就k^0.5个,可以直接用map映射,这样时空复杂度都是n*k^0.5,可以解出答案.

一开始直接用dfs,结果TLE了.

#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int maxn = 2001;
const int maxm = 2e4+4;
const int mod = 1000000007;
const int maxk = 1e6+6;
int n,m,k;
int p[maxn];
typedef long long ll;
map<int ,int >id;
ll dp[maxn][maxn];
int first[maxn];
struct edge{
int nxt,t;
}e[maxm];
void addedge(int f,int t,int ind){
e[ind].nxt = first[f];
e[ind].t = t;
first[f] = ind;
}
int bit[30],num;
void apart(int k){
for(int i=2;i*i<=k;i++){
while(k%i==0){
bit[num++]=i;
k/=i;
}
}
if(k>1)bit[num++]=k;
}
ll gcd(ll a,ll b){
if(b==0)return a;
return gcd(b,a%b);
}
ll lcm(ll a,ll b){
return a*b/gcd(a,b);
}
bool vis[maxn];
int cnt;
ll dfs(int s,int sav){
if(id[sav]!=0&&dp[s][id[sav]]!=0)return dp[s][id[sav]];
if(s==n)return sav==k?1:0;
vis[s]=true;
if(id[sav]==0)id[sav]=++cnt;
for(int pe=first[s];pe!=-1;pe=e[pe].nxt){
int t=e[pe].t;
ll lcmnum=lcm(p[t],sav);
if(vis[t]||lcmnum==sav||lcmnum>k)continue;
dp[s][id[sav]]+=dfs(t,lcmnum);
dp[s][id[sav]]%=mod;
}
vis[s]=false;
return dp[s][id[sav]];
}
int solve(){
num=0;
apart(k);
if(lcm(p[1],k)!=k||lcm(p[n],k)!=k)return 0;
for(int i=2;i<n;i++){
if(lcm(p[i],k)!=k){
vis[i]=true;
}
}
return dfs(1,p[1]);
} void init(){
memset(first,-1,sizeof first);
memset(dp,0,sizeof dp);
memset(vis,0,sizeof vis);
cnt=0;
id.clear();
}
int main(){
while(scanf("%d%d%d",&n,&m,&k)==3){
init();
for(int i = 0;i < m;i++){
int f,t;
scanf("%d%d",&f,&t);
addedge(f,t,i);
}
for(int i = 1;i <= n;i++){
scanf("%d",p+i);
}
int ans=solve();
printf("%d\n",ans);
}
return 0;
}

ZOJ 3644 Kitty's Game dfs,记忆化搜索,map映射 难度:2的更多相关文章

  1. 不要62 hdu 2089 dfs记忆化搜索

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...

  2. dfs+记忆化搜索,求任意两点之间的最长路径

    C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...

  3. hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

  4. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  5. UVA 10400 Game Show Math (dfs + 记忆化搜索)

    Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...

  6. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的数 ...

  7. poj1088-滑雪 【dfs 记忆化搜索】

    http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 79806 ...

  8. DFS——>记忆化搜索——>动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  9. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

随机推荐

  1. 07 concurrency and Multi-version

    本章提要---------------------------------------------------------对并发和锁的进一步补充并发控制事务的隔离级别多版本控制读一致性的含义写一致性- ...

  2. 对于syncedmen类的代码分析

    对于数据在cpu与GPU之间同步的问题,caffe中用syncedMemory这个类来解 决:在GPU模式下,并且使用CUDA时,可以用CaffeMallocHost函数与CaffeFreeHost函 ...

  3. iOS开发之真机测试

    profile 位置在  /Users/userName/Library/MobileDevice/Provisioning Profiles /Users/user_lzz/Library/Mobi ...

  4. iOS开发之 xcode6 APP 打包提交审核详细步骤

    一. 在xcode6.1和ios10.10.1环境下实现app发布 http://blog.csdn.net/mad1989/article/details/8167529 http://jingya ...

  5. openSUSE 国内镜像和镜像使用帮助 (zhuan)

    https://my.oschina.net/u/2475751/blog/631036?p={{currentPage-1}} https://lug.ustc.edu.cn/wiki/mirror ...

  6. phalcon: 官方多模块

    目录结构如下 public/index.php: use Phalcon\Mvc\Router; use Phalcon\Tag; use Phalcon\Mvc\Url; use Phalcon\M ...

  7. 【CodeVS 1038】一元三次方程

    题意 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程. 给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的 ...

  8. Controller接口

    package org.springframework.web.servlet.mvc; public interface Controller { ModelAndView handleReques ...

  9. C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标

    #项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次  C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设 ...

  10. python 练习 16

    #!/usr/bin/python # -*- coding: UTF-8 -*- import time myD = {1: 'a', 2: 'b'} for key, value in dict. ...