10082. 「一本通 3.3 例 1」Word Rings

【题目描述】

传送门

【题解】

将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值。二分枚举答案,最后SPFA刷正环,因为只要有一个正环存在就可以了。

代码如下

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int MAXN=26*26,MAXE=1e5+5;
int n;bool ST,vis[MAXN+5];char ch[1005];
double Ans,mid,dst[MAXN+5];
struct Edge{int tot,lnk[MAXN+5],son[MAXE],nxt[MAXE];double W[MAXE];void clear(){memset(lnk,0,sizeof(lnk)),tot=0;}void Add(int x,int y,int w){son[++tot]=y;W[tot]=w;nxt[tot]=lnk[x];lnk[x]=tot;}
}E;
void SPFA(int x){if(ST) return;vis[x]=1;for(int j=E.lnk[x];j;j=E.nxt[j])if(dst[E.son[j]]<dst[x]+E.W[j]-mid){if(vis[E.son[j]]){ST=1;return;}dst[E.son[j]]=dst[x]+E.W[j]-mid,SPFA(E.son[j]);}vis[x]=0;
}
bool check(){memset(dst,0,sizeof(dst)),memset(vis,0,sizeof(vis));ST=0;for(int i=0;i<MAXN;i++){SPFA(i);if(ST) return 1;}return 0;
}
int main(){#ifndef ONLINE_JUDGEfreopen("prob.in","r",stdin);freopen("prob.out","w",stdout);#endifwhile(scanf("%d",&n),n){E.clear();for(int i=1,Len;i<=n;i++) scanf("%s",ch),Len=strlen(ch),E.Add((ch[0]-'a')*26+(ch[1]-'a'),(ch[Len-2]-'a')*26+(ch[Len-1]-'a'),Len);double L=0,R=1001;for(mid=(R+L)/2;R-L>1e-4;mid=(R+L)/2)if(check()) Ans=L=mid;else R=mid;if(Ans==0) printf("No solution\n");else printf("%.3lf\n",Ans);}return 0;
}

转载于:https://www.cnblogs.com/XSamsara/p/9838819.html

LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】相关推荐

  1. 【C++】「一本通 1.1 例 4」加工生产调度

    「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...

  2. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  3. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  4. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  5. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  6. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

  7. 「一本通 4.1 例 3」校门外的树 (loj10115)

    题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入 l,r表示在 l 到 r 之间种上 ...

  8. loj10157. 「一本通 5.2 例 5」皇宫看守

    思路: 例四是覆盖全部边,dp两个状态,例五是覆盖全部点,dp三个状态. #include<cstdio> #include<iostream> #include<cst ...

  9. #10019. 「一本通 1.3 例 2」生日蛋糕

    冥想盆 感性理解深搜剪枝(看完这个再看下面的文章) 理解本题的思路 [代码实现1:最慢最好理解(自己打的):100多ms] [代码实现2:次慢:30多ms] [代码实现3:最快:10多ms] 最后放上 ...

最新文章

  1. 论文翻译 | LS-Net:单目双目视觉的非线性最小二乘学习算法
  2. JavaScript异步调用的发展历程
  3. C#做的在线升级小程序
  4. hdu5437(2015长春网络赛A题)
  5. SAP UI5 sap.viz.ui5.controls.VizFrame 的 aggregation 之一:dataset
  6. 恭喜你,20级考研生!你将在考研前看到这篇最靠谱的学习方法!
  7. python如何导入函数_Python导入(import)模块的方法
  8. Python获取本机所有IP地址
  9. php动态页面引用,怎么在动态网页PHP中引用的使用注意事项
  10. 在线电子词典程序框架
  11. mac移动硬盘安装linux系统安装教程,移动硬盘上安装ubuntu系统
  12. 红帽子Linux7安装Oracle,RedHat Enterprise Linux7.0安装Oracle 12C
  13. maven项目spring整合mybatis——最基础的方式
  14. 利用VS2019对程序进行时间性能分析
  15. 跟着项目学设计模式(六):三层架构
  16. Python编程:通过百度文字识别提取表格数据
  17. Openwrt无线中继设置并访问外网
  18. 1、Java好的书籍
  19. Linux下编译pjproject-2.6并运行例程simple_pjsua
  20. Esxi5.5添加4T报错的问题

热门文章

  1. vue解决Element-ui中 el-cascader 级联选择器 最后一级数据为空显示暂无数据问题
  2. 给点建议!开源项目架构选择!仿腾讯IM后端项目!InChat!
  3. 鲎试剂停产,内毒素检测大地震!重组C因子法了解一下
  4. 股票波段+趋势+主力动向 三合一指标公式(无未来函数)
  5. 微信登录小程序获取openId
  6. 容联云AI科学院研发先进KBQA能力,问鼎大规模中文知识图谱问答权威性测评
  7. N76E003 管脚中断
  8. 【机器学习】朴素贝叶斯(多分类版本)—— python3 实现方案
  9. public string 和public void区别
  10. 申请邓白氏码(DUNS)步骤