1504 Word Rings

将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值,然后用二分枚举答案即可
不过感觉这个题这么像KMP或者hash
用SPFA,因为这个题目的专栏是SPFA的优化

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1e5+10;
const int INF=0x3fffffff;
const double eps=1e-4;
typedef long long LL;
char aa[1010];
int head[maxn],vis[maxn];
double dis[maxn];
int n,cnt;
struct node
{int to,next,dis;
}ed[maxn*10];
void add(int a,int b,int c)//邻接表
{ed[++cnt].to=b;ed[cnt].dis=c;ed[cnt].next=head[a];head[a]=cnt;
}
int js(char a,char b)
{return (a-'a')*26+(b-'a')+1; //转化
}
bool spfa(int x,double mid)
{vis[x]=1;for(int i=head[x];i;i=ed[i].next){int t=ed[i].to;if(dis[x]+ed[i].dis-mid>dis[t]){dis[t]=dis[x]+ed[i].dis-mid;//进行松弛 if(vis[t]||spfa(t,mid)){//存在环 vis[x]=0;return 1;}}}vis[x]=0;return 0;
}
bool judge(double mid){memset(dis,0,sizeof(dis));for(int i=1;i<=26*26;i++)//从每个点进行枚举 { if(spfa(i,mid)) return 1;}return 0;
}
int main()
{while(scanf("%d",&n)&&n)//循环输入 {memset(vis,0,sizeof(vis));memset(head,0,sizeof(head));for(int i=0;i<n;i++){scanf("%s",aa);int len=strlen(aa);add(js(aa[0],aa[1]),js(aa[len-2],aa[len-1]),len); //字符串的建边 }double mid,left=0,right=1000;//预处理,进行二分查找 while(right-left>=eps){mid=(left+right)/2;//取中间数 if(judge(mid))//喝茶 {left=mid;}else right=mid;}if(left==0) printf("No solution\n");//无解 else printf("%.2lf\n",left);}return 0;
}

1504 Word Rings相关推荐

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

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  2. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  3. π-Algorithmist分类题目(2)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...

  4. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

  5. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  6. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  7. AtCoder Beginner Contest 264 G.String Fair(最短路/暴力dp 补写法)

    题目 n(n<=18278)个串,第i个串Ti(Ti为纯小写字母串且长度不超过3), 得分Pi(-1e9<=Pi<=1e9),表示只要子串中出现一次Ti,就会获得Pi的得分 对于你可 ...

  8. 软工第三次作业-结对编程

    结对项目-最长英语单词链 哈哈,这次记住了,来,初始化! 项目 内容 这个作业属于哪个课程 2023年北航敏捷软件工程社区 这个作业的要求在哪里 结对项目-最长英语单词链 我在这个课程的目标是 学习软 ...

  9. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

最新文章

  1. 【PDF下载】无意中发现的另一本 统计学入门好书
  2. 【转】IOS的各种后台情况的实现
  3. Tomcat下HTTPS双向认证配置以及客户端调用案例
  4. h5软盘占位把定位内容往上顶_安徽省计算机一级考试选择题、操作题、打字题库2012年上半年版.xls...
  5. UFT开发实例:QTP调用OutLook自动发送邮件
  6. vue锚点定位(代码通用) - 总结篇
  7. win10系统自带的计算机无法使用吗,Win10如何使用系统自带的硬件设备检测工具?...
  8. mysql可以登陆sqlyog1862_MySQL错误号码1862:your password has expired
  9. node.js下mongoose简单操作实例
  10. 【裴礼文数学分析】例1.1.1
  11. 风行python_Python是啥?竟然彻底改变了老板对我的看法……
  12. (自兴人工智能)python猜数字游戏
  13. pgAdmin4的应用(二)
  14. ECharts - 15.旭日图
  15. 镜头像差之三——慧差
  16. CART算法(机器学习)
  17. frp代理工具流量分析
  18. 服务器文件夹temp,服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决...
  19. HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)
  20. 二进制小数与整数与十进制小数和整数的互换

热门文章

  1. JDK源码阅读之路【不断更新】
  2. 2018校招笔试题——网易编程题跳石板
  3. 华科教授因学生住宿问题投诉后勤处:被学校处分,取消两年评优资格
  4. 程序员啊,他又加班了!
  5. 【论文笔记】Beyond frontal faces: improving person recognition using multiple cues
  6. 鄂马赛记 | 跑步就跑步,跑什么马拉松?
  7. 机器学习精髓-机器学习百页书
  8. 北大计算机本科生如何保研清华,高考无缘清华、北大,选择这五所985大学,保研几率大...
  9. redis删除单个key和多个key
  10. python写矩阵奇异值分解