hdu4511 小明系列故事——女友的考验(AC自动机+dp)
2016-10-01 10:22
323 查看
hdu4511
题目
中文题目思路
AC自动机好久以前看的了,都要忘了。。。。正好复习以下。dp[i][j] 表示在i点,状态在j的距离,转移比i大的点k,判断下一个状态ss是否可行,可行则转移到dp[k][ss]
代码
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace std; const double INF = 1e20; int n,m; double dis(double x1,double y1,double x2,double y2) { return sqrt((double)(1.0*x1-x2)*(1.0*x1-x2)+(double)(1.0*y1-y2)*(1.0*y1-y2)); } double dp[55][1000]; double x[100],y[100]; int a[100]; struct Trie { int next[1000][55],fail[1000],end[1000]; int root,L; int newnode() { for(int i=1; i<=n; i++) next[L][i]=-1; end[L++]=0; return L-1; } void init() { L=0; root=newnode(); } void insert(int a[],int cnt) { int now=root; for(int i=0; i<cnt; i++) { if(next[now][a[i]]==-1) next[now][a[i]]=newnode(); now=next[now][a[i]]; } end[now]=1; } void build() { queue<int> q; fail[root]=root; for(int i=1; i<=n; i++) { if(next[root][i]==-1) next[root][i]=root; else { fail[next[root][i]]=root; q.push(next[root][i]); } } while(!q.empty()) { int now=q.front(); q.pop(); end[now]|=end[fail[now]]; for(int i=1; i<=n; i++) if(next[now][i]==-1) next[now][i]=next[fail[now]][i]; else { fail[next[now][i]]=next[fail[now]][i]; q.push(next[now][i]); } } } void solve() { for(int i=1; i<=n; i++) for(int j=0; j<L; j++) dp[i][j]=INF; dp[1][next[root][1]]=0; for(int i=1; i<n; i++) for(int j=0; j<L; j++) if(dp[i][j]<INF) { for(int k=i+1; k<=n; k++) { int ss=next[j][k]; if(end[ss]) continue; dp[k][ss]=min(dp[k][ss],dp[i][j]+dis(x[i],y[i],x[k],y[k])); } } double ans=INF; for(int i=0; i<L; i++) if(dp [i]<INF) ans=min(ans,dp [i]); if(ans == INF)printf("Can not be reached!\n"); else printf("%.2f\n",ans); } } ac; int main() { while(scanf("%d%d",&n,&m)!=EOF&&(n+m)) { for(int i=1; i<=n; i++) scanf("%lf%lf",&x[i],&y[i]); ac.init(); int k; while(m--) { scanf("%d",&k); for(int i=0; i<k; i++) scanf("%d",&a[i]); ac.insert(a,k); } ac.build(); ac.solve(); } return 0; }
相关文章推荐
- hdu4511---小明系列故事——女友的考验(AC自动机+dp)
- hdu - 4511 小明系列故事——女友的考验(AC自动机+DP)
- hdu4511小明系列故事——女友的考验(ac自动机+最短路)
- hdu 4511 小明系列故事——女友的考验(AC自动机+dp)
- 【HDU】4511 小明系列故事——女友的考验 (AC自动机+DP)
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
- HDU - 4511 小明系列故事――女友的考验(AC自动机+DP)
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
- HDU 4511 小明系列故事——女友的考验(自动机+DP)
- HDU4511 小明系列故事——女友的考验(AC自动机 + DP)
- HDU4511-小明系列故事――女友的考验
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + dp)
- HDU 4511 小明系列故事——女友的考验(AC自动机 + DP)
- hdu 4511 小明系列故事——女友的考验
- hdu 4511 小明系列故事——女友的考验
- 小明系列故事——女友的考验
- HDU 4534 郑厂长系列故事——新闻净化(AC自动机+DP)
- HDU 4534 郑厂长系列故事——新闻净化(AC自动机+DP)
- AC自动机 + 二维最短路 HDU 4511 小明系列故事――女友的考验