小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP
题意:自己看题目,中文体面。
题解:
把所有不能走的路径放入AC自动机中。
然后DP【i】【j】表示走到 i 这个点,且位于AC自动机 j 这个节点最短距离
然后直接DP即可。注意一点会爆int
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <cmath>
- #include <ctime>
- #include <cstdio>
- #include <string>
- #include <vector>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- #include <unordered_map>
- #define pi acos(-1.0)
- #define eps 1e-9
- #define fi first
- #define se second
- #define rtl rt<<1
- #define rtr rt<<1|1
- #define bug printf("******\n")
- #define mem(a, b) memset(a,b,sizeof(a))
- #define name2str(x) #x
- #define fuck(x) cout<<#x" = "<<x<<endl
- #define sfi(a) scanf("%d", &a)
- #define sffi(a, b) scanf("%d %d", &a, &b)
- #define sfffi(a, b, c) scanf("%d %d %d", &a, &b, &c)
- #define sffffi(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
- #define sfL(a) scanf("%lld", &a)
- #define sffL(a, b) scanf("%lld %lld", &a, &b)
- #define sfffL(a, b, c) scanf("%lld %lld %lld", &a, &b, &c)
- #define sffffL(a, b, c, d) scanf("%lld %lld %lld %lld", &a, &b, &c, &d)
- #define sfs(a) scanf("%s", a)
- #define sffs(a, b) scanf("%s %s", a, b)
- #define sfffs(a, b, c) scanf("%s %s %s", a, b, c)
- #define sffffs(a, b, c, d) scanf("%s %s %s %s", a, b,c, d)
- #define FIN freopen("../in.txt","r",stdin)
- #define gcd(a, b) __gcd(a,b)
- #define lowbit(x) x&-x
- #define IO iOS::sync_with_stdio(false)
- using namespace std;
- typedef long long LL;
- typedef unsigned long long ULL;
- const ULL seed = ;
- const LL INFLL = 0x3f3f3f3f3f3f3f3fLL;
- const int maxn = 1e6 + ;
- const int maxm = 8e6 + ;
- const int INF = 0x3f3f3f3f;
- const int mod = 1e9 + ;
- int n, m, k, x[maxn], y[maxn], buf[];
- double cal(int id1, int id2) {
- return sqrt((1.0 * x[id1] - x[id2]) * (1.0 * x[id1] - x[id2]) + (1.0 * y[id1] - y[id2]) * (1.0 * y[id1] - y[id2]));
- }
- struct Aho_Corasick {
- int next[][], fail[], End[];
- int root, cnt;
- int newnode() {
- for (int i = ; i < ; i++) next[cnt][i] = -;
- End[cnt++] = ;
- return cnt - ;
- }
- void init() {
- cnt = ;
- root = newnode();
- }
- void insert(int len) {
- int now = root;
- for (int i = ; i < len; i++) {
- if (next[now][buf[i]] == -) next[now][buf[i]] = newnode();
- now = next[now][buf[i]];
- }
- End[now]++;
- }
- void build() {
- queue<int> Q;
- fail[root] = root;
- for (int i = ; i < ; i++)
- if (next[root][i] == -) next[root][i] = root;
- else {
- fail[next[root][i]] = root;
- Q.push(next[root][i]);
- }
- while (!Q.empty()) {
- int now = Q.front();
- Q.pop();
- if (End[fail[now]]) End[now] = ;
- for (int i = ; i < ; i++)
- if (next[now][i] == -) next[now][i] = next[fail[now]][i];
- else {
- fail[next[now][i]] = next[fail[now]][i];
- Q.push(next[now][i]);
- }
- }
- }
- double dp[][];
- void solve() {
- for (int i = ; i <= n; ++i)
- for (int j = ; j < cnt; ++j)
- dp[i][j] = INFLL;
- dp[][next[root][]] = ;
- for (int i = ; i <= n; ++i) {
- for (int j = ; j < cnt; ++j) {
- if (dp[i][j] == INFLL) continue;
- for (int k = i + ; k <= n; ++k) {
- int idx = next[j][k];
- if (End[idx]) continue;
- dp[k][idx] = min(dp[k][idx], dp[i][j] + cal(i, k));
- }
- }
- }
- double ans = INFLL;
- for (int i = ; i < cnt; ++i) ans = min(ans, dp[n][i]);
- if (ans == INFLL) printf("Can not be reached!\n");
- else printf("%.2f\n", ans);
- }
- void debug() {
- for (int i = ; i < cnt; i++) {
- printf("id = %3d,fail = %3d,end = %3d,chi = [", i, fail[i], End[i]);
- for (int j = ; j < ; j++) printf("%2d", next[i][j]);
- printf("]\n");
- }
- }
- } ac;
- int main() {
- // FIN;
- while (~sffi(n, m)) {
- if (n == && m == ) break;
- for (int i = ; i <= n; ++i) sffi(x[i], y[i]);
- ac.init();
- for (int i = ; i < m; ++i) {
- sfi(k);
- for (int j = ; j < k; ++j) sfi(buf[j]);
- ac.insert(k);
- }
- ac.build();
- ac.solve();
- }
- return ;
- }
小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP的更多相关文章
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU4511 小明系列故事——女友的考验 —— AC自动机 + DP
题目链接:https://vjudge.net/problem/HDU-4511 小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memor ...
- HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)
Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则: 1.如果小明 ...
- HDU 4511 小明系列故事——女友的考验 ( Trie图 && DP )
题意 : 给出编号从1 ~ n 的 n 个平面直角坐标系上的点,求从给出的第一个点出发到达最后一个点的最短路径,其中有两种限制,其一就是只能从编号小的点到达编号大的点,再者不能走接下来给出的 m 个 ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)题解
题意:从 1 走到 n,要求所走路径不能出现给定的路径,求最短路 思路:因为要求不能出现给定路径,那么我可以求助ac自动机完成判断. 我们可以在build的时候标记哪些路径不能出现,显然下面这种表示后 ...
- HDU4511 小明系列故事——女友的考验(AC自动机 + DP)
题目大概说有平面有n个点,从1点出发走到n点,每一步只能走到序号比当前更大的点且走的序列不能包含给定的m个序列中的任何一个,问1走到n的最短路. 用m个序列建个AC自动机,后缀包含整个序列的结点标记一 ...
- hdu4511小明系列故事——女友的考验(ac自动机+最短路)
链接 预处理出来任意两点的距离,然后可以顺着trie树中的节点走,不能走到不合法的地方,另开一维表示走到了哪里,依次来更新. 注意判断一下起点是不是合法. #include <iostream& ...
- HDU-4511 小明系列故事——女友的考验 floyd变种-标号递增最短路
题意:给定N个点,现在要求出从1号点到N号点的最短路.题目给的限制条件就是对于某条路径是不能够走的,但是可以选择某段路径走,另外就是所走的路径的标号必须是递增的. 分析:由于给定的是一些列的坐标点,这 ...
随机推荐
- 使用maven插件反向映射generatorConfig.xml生成代码
一.配置Maven pom.xml 文件 <!-- 反向映射 --> <plugin> <groupId>org.mybatis.generator</gro ...
- HTTPS 加密机制
目录 1. HTTPS 概述 2. 对称加密 3. 非对称加密 4. 非对称加密改良方案 5. 非对称加密 + 对称加密 6. 中间人攻击 7. 数字证书 8. 数字签名 9. HTTPS 工作原理 ...
- RZ、NRZ、NRZI、曼彻斯特编码
Frm: http://blog.sina.com.cn/s/blog_78e87ba10102wj9g.html 在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU.DSP.MCU甚至是个 ...
- pair的用法
如何定义?(初始化) 1. pair<int,int>p; 2.定义即初始化,也可以这个样子 pair<,); 里面的类型还可以是string,double等. 3.还可以这样子初始 ...
- 拾遗:ssh 公钥连接前的相关准备
ssh 公钥连接条件: sshd_config 中启用公钥认证 authorized_keys 文件权限必须为 0600 目标用户的 家目录 权限必须为 0700 目标账户必须已设定登陆密码(即处于可 ...
- 注解@Override
Android的开发者对@Override肯定是非常熟悉,不管是自己的代码中还是书上都会出现,但是他是什么意思呢?如下: @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: ...
- error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?
解决方案: 属性>预编译头>不使用预编译头>应用
- 人工智能都能写Java了!这款插件让你编程更轻松
最近在浏览技术社区,发现了一款 IDE 插件,利用人工智能技术帮助程序员高效写代码.节省开发时间,一下子勾起了我的好奇心. 下载之后,使用一番,确实蛮好的,可以有效提升编程效率. 这款插件叫:aixc ...
- 关于while循环中的break和continue的区别
while循环如果不加条件限制的话,它会一直循环下去,那么问题就来了,如果我不用条件去终止while循环的话,那么我该用什么方法去终止呢? 你可以选择两种终止while循环的方法 1.break 强 ...
- 笔记54 Mybatis快速入门(五)
Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...