【JZOJ3852】单词接龙
来源:互联网 发布:linux运维面试会问什么 编辑:程序博客网 时间:2024/05/16 06:28
Description
Bsny从字典挑出N个单词,并设计了接龙游戏,只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来。
Bsny想要知道在所给的所有单词中能否按照上述方式接龙组成一个单词环(可能是多个),若能,求所有环的环中单词平均长度最大值。
Solution
我们把前两个字符或后两个字符看成点,单词看成边。
设
然后我们二分答案,把所有边权减去
Code
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)#define rep(i,x) for(int i=ls[x];i;i=nx[i])#define N 100010#define SIZE 7010#define eps 0.001using namespace std;int to[N],nx[N],ls[N],num=0;double val[N];int c[SIZE],tot=0;char s[SIZE];void link(int x,int y,double c){ num++; to[num]=y; nx[num]=ls[x]; ls[x]=num; val[num]=c;}int g(char a,char b){ return (a-'a')*100+(b-'a');}int d[N],in[N];double dis[N];bool vis[SIZE],bz[SIZE];int spfa(int qd,double z){ fo(i,0,tot) dis[i]=-2354343435434.00; memset(vis,0,sizeof(vis)); memset(in,0,sizeof(in)); int l=0,r=1; d[1]=qd; vis[qd]=bz[qd]=1; dis[qd]=0; while(l<r) { l++; int x=d[l]; rep(i,x) { int v=to[i]; if(dis[v]<dis[x]+val[i]-z) { dis[v]=dis[x]+val[i]-z; if(!vis[v]) { in[v]++; if(in[v]>tot) return 1; vis[v]=bz[v]=1; d[++r]=v; } } } vis[x]=0; } return 0;}bool check(double mid){ memset(bz,0,sizeof(bz)); fo(i,1,tot) if(!bz[i]) if(spfa(i,mid)>0) return 1; return 0;}int main(){ int n; scanf("%d",&n); int mx=0; fo(i,1,n) { scanf("%s",s+1); int l=strlen(s+1); int t1=g(s[1],s[2]),t2=g(s[l-1],s[l]); if(!c[t1]) c[t1]=++tot; if(!c[t2]) c[t2]=++tot; link(c[t1],c[t2],l*1.0); mx=max(mx,l); } printf("%d\n",check(883.87)); double l=0,r=mx*1.0; while(l+eps<r) { double mid=(l+r)/2; bool t=check(mid); if(t) l=mid; else r=mid; } printf("%.2lf",l);}
1 0
- [JZOJ3852] 单词接龙
- 【JZOJ3852】单词接龙
- 【JZOJ3852】【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- 【JZOJ3852】【spfa判负环】【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 数据结构与算法分析笔记与总结(java实现)--链表15:链表回文判断问题
- spark parquet 从hdfs 上读 和写
- Linux C笔记(1)
- 记录csdn第一篇博客
- 在DOS下引用jar包
- 【JZOJ3852】单词接龙
- xml的4中解析方式与详解
- 使用IntelliJ IDEA 配置Maven(入门)
- 总结 C++中 基本内置类型 数据所占大小 和数据类型
- spark parquet 从hdfs 上读 和写 scala 版本
- 第4节-牛顿方法、指数分布族和广义线性模型
- java中image与tif图片的互转
- Java反射机制详解
- Poj 1061 青蛙的约会【拓展欧几里得】