LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】
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】相关推荐
- 【C++】「一本通 1.1 例 4」加工生产调度
「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...
- 【C++】「一本通 1.1 例 2」种树
「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...
- #10001. 「一本通 1.1 例 2」种树
#10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...
- 【C++】「一本通 1.1 例 5」智力大冲浪
「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
- #10003. 「一本通 1.1 例 4」加工生产调度(贪心)
加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...
- 「一本通 4.1 例 3」校门外的树 (loj10115)
题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入 l,r表示在 l 到 r 之间种上 ...
- loj10157. 「一本通 5.2 例 5」皇宫看守
思路: 例四是覆盖全部边,dp两个状态,例五是覆盖全部点,dp三个状态. #include<cstdio> #include<iostream> #include<cst ...
- #10019. 「一本通 1.3 例 2」生日蛋糕
冥想盆 感性理解深搜剪枝(看完这个再看下面的文章) 理解本题的思路 [代码实现1:最慢最好理解(自己打的):100多ms] [代码实现2:次慢:30多ms] [代码实现3:最快:10多ms] 最后放上 ...
最新文章
- 论文翻译 | LS-Net:单目双目视觉的非线性最小二乘学习算法
- JavaScript异步调用的发展历程
- C#做的在线升级小程序
- hdu5437(2015长春网络赛A题)
- SAP UI5 sap.viz.ui5.controls.VizFrame 的 aggregation 之一:dataset
- 恭喜你,20级考研生!你将在考研前看到这篇最靠谱的学习方法!
- python如何导入函数_Python导入(import)模块的方法
- Python获取本机所有IP地址
- php动态页面引用,怎么在动态网页PHP中引用的使用注意事项
- 在线电子词典程序框架
- mac移动硬盘安装linux系统安装教程,移动硬盘上安装ubuntu系统
- 红帽子Linux7安装Oracle,RedHat Enterprise Linux7.0安装Oracle 12C
- maven项目spring整合mybatis——最基础的方式
- 利用VS2019对程序进行时间性能分析
- 跟着项目学设计模式(六):三层架构
- Python编程:通过百度文字识别提取表格数据
- Openwrt无线中继设置并访问外网
- 1、Java好的书籍
- Linux下编译pjproject-2.6并运行例程simple_pjsua
- Esxi5.5添加4T报错的问题