博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3654 图样图森破
阅读量:7043 次
发布时间:2019-06-28

本文共 2080 字,大约阅读时间需要 6 分钟。

非常好的一道题

我们把每个串正反拆成两个串,对于每个正串的所有节点,我们对他们和其他反串的起始位置进行判断lcp,如果这个节点后面的字符串和某个反串的lcp长度等于这个节点后面的字符串长度,那么我们就从这个节点向那个反串的开头连一个边权为二倍长度的边,如果lcp长度等于反串的总长时,我们就连向该节点后面的长度的节点,边权也是二倍lcp的长度,如果lcp不满的话,就连向T,都满的话,直接输出inf,另外,对于每个以串起始位置为左端点的回文串,我们从S向这个串后面的节点连边权为长度的边,可以发现这样在全图跑一个最长路就是最终的答案,如果有环就是inf;

证明什么的比较显然,画画图就出来了。

貌似还有更快的dfs做法,但是我不会。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define N 200505 8 using namespace std; 9 int n,m,len[105],zzh; 10 char s[105][N]; 11 namespace graph{ 12 int e=1,head[N],S,pp[N]; 13 struct edge{ 14 int v,w,next; 15 }ed[N<<7]; 16 void add(int u,int v,int w){ 17 if(u==v)return; 18 if(v==S+1){ 19 if(pp[u]){ed[pp[u]].w=max(ed[pp[u]].w,w);return;} 20 else pp[u]=e; 21 } 22 ed[e].v=v;ed[e].w=w; 23 ed[e].next=head[u];head[u]=e++; 24 } 25 long long ans,D[N]; 26 bool vis[N],flag=0; 27 void dfs(int x,long long dis){ 28 if(flag)return; 29 D[x]=dis;ans=max(ans,dis);vis[x]=1; 30 for(int i=head[x];i;i=ed[i].next){ 31 int v=ed[i].v; 32 if(vis[v]){flag=1;return;} 33 if(D[v]<=(long long)dis+ed[i].w)dfs(v,dis+ed[i].w); 34 }vis[x]=0; 35 } 36 void work(){ 37 dfs(S,0); 38 if(flag)puts("Infinity"); 39 else printf("%d\n",ans); 40 } 41 } 42 namespace manacher{ 43 int mx,pos,cnt,num[N],r[N],n; 44 char s[N]; 45 void manacher(char *ch){ 46 n=strlen(ch); 47 for(int i=0;i
=0&&i+r[i]
mx)pos=i,mx=i+r[i]; 56 if(i-r[i]+1==0)num[++cnt]=((i+r[i]-1)>>1)+1; 57 if(i&1)graph::ans=max(graph::ans,(long long)(r[i]>>1)<<1); 58 else graph::ans=max(graph::ans,(long long)(((r[i]+1)>>1)<<1)-1); 59 } 60 } 61 } 62 namespace sa{ 63 int buc[N],wa[N],wb[N]; 64 int sa[N],rank[N],height[N],r[N],n; 65 char s[N]; 66 bool cmp(int *d,int a,int b,int c){ 67 return d[a]==d[b]&&d[a+c]==d[b+c]; 68 } 69 void getheight(int n){ 70 int i,j,k=0; 71 for(i=0;i
=j)y[p++]=sa[i]-j; 85 for(i=0;i
y)swap(x,y);x++;108 int k=0;109 while(x+(1<
<=y)k++;110 return min(minn[x][k],minn[y-(1<
View Code

 

转载于:https://www.cnblogs.com/Ren-Ivan/p/8370548.html

你可能感兴趣的文章
java基础-IO
查看>>
python多线程之创建线程
查看>>
我的友情链接
查看>>
sersync同步配置
查看>>
Apache2 httpd.conf配置文件中文版详解
查看>>
Apache Shiro学习笔记(二)身份验证JdbcRealm
查看>>
主机监控shell脚本
查看>>
SharePoint 2013 部署 Part 4
查看>>
PowerDesigner15 使用时的十五个问题附解决方法
查看>>
马斯洛需求层次理论
查看>>
Integer与int那小点关系
查看>>
bootstrap-面板
查看>>
关于字符串explode的用法解析
查看>>
SQL2000未能找到存储过程_master.dbo.xp_regread
查看>>
Javascript面向对象编程Tab切换组件
查看>>
简洁但功能强大的EditPlus
查看>>
dir-cmp.py——目录比较dircmp方法
查看>>
String、StringBuffer、StringBuild类的区别
查看>>
Xcode8 添加PCH文件
查看>>
Active Directory 回收站之Windows Server 2012
查看>>