2018.09.09 poj2949Word Rings(01分数规划+spfa判环)
传送门
这题要先巧妙的转化一下。
对于每个字符串,我们把头尾的两个小字符串对应的点连边,边权是这个字符串的长度。
这样最多会出现26*26个点。
这个时候就只用求出边权和跟边数的最大比值了。
这个显然01分数规划+spfa判环解决。
注意用dfs版的spfa要快一些。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define N 200005
using namespace std;
int n,first[N],id1,id2,cnt,tot,len;
bool in[N];
double dis[N];
char s[1005];
struct edge{int v,next,w;}e[N<<2];
inline int idx(char a,char b){return (a-'a')*26+b-'a'+1;}
inline void add(int u,int v,int w){e[++cnt].v=v,e[cnt].next=first[u],e[cnt].w=w,first[u]=cnt;}
inline bool check(double a,double b){return fabs(a-b)>=1e-10;}
inline bool spfa(int p,double mid){
in[p]=true;
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(dis[v]>dis[p]+mid-e[i].w){
dis[v]=dis[p]+mid-e[i].w;
if(in[v]||spfa(v,mid)){in[p]=false;return true;}
}
}
return in[p]=false;
}
inline bool judge(double mid){
memset(dis,0,sizeof(dis));
for(int i=1;i<=26*26;++i)if(spfa(i,mid))return true;
return false;
}
int main(){
while(scanf("%d",&n)&&n){
cnt=0,memset(first,0,sizeof(first));
for(int i=1;i<=n;++i){
scanf("%s",s),len=strlen(s);
if(len<2)continue;
id1=idx(s[0],s[1]),id2=idx(s[len-2],s[len-1]),add(id1,id2,len);
}
double l=0.0,r=1000.0;
while(check(l,r)){
double mid=(l+r)/2;
if(judge(mid))l=mid;
else r=mid;
}
if(l==0.0)puts("No solution.");
else printf("%.4lf\n",l);
}
return 0;
}
2018.09.09 poj2949Word Rings(01分数规划+spfa判环)的更多相关文章
- 2018.09.12 poj3621Sightseeing Cows(01分数规划+spfa判环)
传送门 01分数规划板题啊. 发现就是一个最优比率环. 这个直接二分+spfa判负环就行了. 代码: #include<iostream> #include<cstdio> # ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环
3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 594 Solved: 360[Submit][Statu ...
- [HNOI2009]最小圈 分数规划 spfa判负环
[HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...
- POJ3621Sightseeing Cows[01分数规划 spfa(dfs)负环 ]
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9703 Accepted: 3299 ...
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】
把add传参里的double写成int我也是石乐志-- 首先这个东西长得就很01分数规划 然后我不会证为什么没有8字环,我们假装他没有 那么设len为环长 \[ ans \leq \frac{\sum ...
- [P1768]天路(分数规划+SPFA判负环)
题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...
- bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)
PS:此题数组名皆引用:戳我 题目大意:有n个点m条有向边的图,边上有花费,点上有收益,点可以多次经过,但是收益不叠加,边也可以多次经过,但是费用叠加.求一个环使得收益和/花费和最大,输出这个比值. ...
随机推荐
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L
mybatis与springboot集成的时候,报错:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManag ...
- git-采集编码搜索
https://github.com/search?utf8=%E2%9C%93&q=%E9%87%87%E9%9B%86%E7%BC%96%E7%A0%81&type= https: ...
- ABAP-BarCode-1-HTML二维码打印及动态屏幕实现
很久很久...以前写的一个测试程序,主要是通过ABAP与HTML交互,编写JavaScript实现二维码及动态屏幕实现. 1.ABAP界面效果 2.实现代码 *&--------------- ...
- tair介绍以及配置
简介 tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存 ...
- 协变(covariance),逆变(contravariance)与不变(invariance)
协变,逆变与不变 能在使用父类型的场景中改用子类型的被称为协变. 能在使用子类型的场景中改用父类型的被称为逆变. 不能做到以上两点的被称为不变. 以上的场景通常包括数组,继承和泛型. 协变逆变与泛型( ...
- 断开的管道 java.io.IOException: Broken pipe 解决方法
一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常! ...
- LINUX 修复relocation error: /lib/tls/libc.so.6
错误信息: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not ...
- Parametric Statistics
1.What are “Parametric Statistics”? 统计中的参数指的是总体的一个方面,而不是统计中的一个方面,后者指的是样本的一个方面.例如,总体均值是一个参数,而样本均值是一个统 ...
- MySql初步II
[MySql初步II] 1.Order By 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列. 默认情况下,它是按升排列. 实例: 2.Join语法 Join不是一个关键字 ...
- 103041000997维护的是周批,按周合并后再考虑最小采购批量、舍入值、然后回写到SAP系统
描述:103041000997维护的是周批量,但最终没有按周批量来回写数据. 业务逻辑如下: 1.净需求考虑数量按周汇总(也有按日.按3天,具体 要根据物料主数据维护来判断) 2.第1点的结果再加上安 ...