poj 2049(二分+spfa判负环)
poj 2049(二分+spfa判负环)
给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边。问字符串环的平均最小值是多少。1 ≤ n ≤ 100000,有多组数据。
首先根据套路,二分是显然的。然后跑一下spfa判断正环就行了。
然而我被no solution坑了十次提交。。
#include <cctype>
#include <cstdio>
#include <cstring>
using namespace std;const int maxn=1e5+5, maxm=1e5+5;
const double eps=1e-4;struct Graph{struct Edge{int to, next, v; Graph *bel;inline int operator *(){ return to; }Edge& operator ++(){return *this=bel->edge[next]; }};void reset(){cntedge=0; memset(fir, 0, sizeof(fir)); }void addedge(int x, int y, int v){Edge &e=edge[++cntedge];e.to=y; e.next=fir[x]; e.v=v;e.bel=this; fir[x]=cntedge;}Edge& getlink(int x){ return edge[fir[x]]; }//Edge edge[maxm*2];int cntedge, fir[maxn];
}g;int n, len, visit[maxn];
double dis[maxn], l, r, mid; bool flag;
char s[1005];int trans(char c1, char c2){return (c1-'a')*26+c2-'a'+1; }bool spfa(int now, double A){Graph::Edge e=g.getlink(now); visit[now]=1;for (; *e; ++e){if (dis[now]+A-e.v<dis[*e]){dis[*e]=dis[now]+A-e.v;if (visit[*e]||spfa(*e, A)) return true;}} visit[now]=0;return false;
}int main(){for (; scanf("%d", &n), n; ){g.reset();for (int i=1; i<=n; ++i){do{fgets(s, 1e5, stdin);len=strlen(s);}while (len<2);g.addedge(trans(s[0], s[1]),trans(s[len-3], s[len-2]), len-1);}l=0; r=2000;while (r-l>eps){mid=(l+r)/2; flag=false;for (int i=1; i<=26*26; ++i) dis[i]=visit[i]=0;for (int i=1; i<=26*26; ++i)if (spfa(i, mid)){ flag=true; break; }if (flag) l=mid; else r=mid;}if (r<=eps) printf("No solution.\n");else printf("%.3lf\n", (l+r)/2);}return 0;
}
转载于:https://www.cnblogs.com/MyNameIsPc/p/7989251.html
poj 2049(二分+spfa判负环)相关推荐
- POJ 3259 Wormholes SPFA判负环
思路:SPFA判负环 数组不要开太小-- (后面附一组测试数组) // by SiriusRen #include <queue> #include <cstdio> #inc ...
- [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案
题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...
- dfs版SPFA判负环
例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...
- 【2019icpc南京站网络赛 - H】Holy Grail(最短路,spfa判负环)
题干: As the current heir of a wizarding family with a long history,unfortunately, you find yourself f ...
- 天路(01规划+SPFA判负环)
传送门 公式图片来自洛谷题解 因为求V之和与P之和的比值的最大值.这个值不超过200 考虑到二分答案,设ans为最大值,则有 可以看出是01分数规划 那么每次就重新分配边的权值: ans*ci-vi ...
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详(并不)解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多 ...
- POJ 2240 Arbitrage(SPFA判正环)
POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环
Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...
- poj3259 Wormholes(spfa判负环)
题意:给m条路(S,E,T)代表点S.E之间双向边权重为T,紧接着给W个虫洞(S,E,T)代表S到E的有向边可以回到T秒前即权重为-T,问能不能通过虫洞看到看到初始的自己,即能不能回到初始点所在的时间 ...
最新文章
- 接受者操作特征曲线ROC
- JavaScript正则表达式(2)
- UI实用素材|电子商务界面模板
- NPOI读写Excel sheet操作
- mysql 5.5主从同步_MySQL 5.5主从同步
- 20145324 20145325《信息安全系统设计基础》实验二 固件设计
- 8.PHP核心技术与最佳实践 --- 缓存
- 软件园区网络设计之网络总体设计
- Java课程设计——日历的设计与实现
- 一天搞懂深度学习(李宏毅)-学习笔记
- SQL注入风险高,手写 SQL 须谨慎
- 非对称加密算法 (RSA、DSA、ECC、DH)
- c语言将阿拉伯数字变为大写,使用C#实现阿拉伯数字到大写中文的转换
- 中国地图及各省市县地图json下载地址
- 硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
- Hbase 内置过滤器
- 【文本匹配】之 经典ESIM论文详读
- kermit 安装 配置 使用
- cadence——基本操作1
- 常用网址收藏 (zz)
热门文章
- 计算机通信技术用到的文献,计算机技术在通信中的应用与发展
- 计算机2级学的是什么时候出来的,2019计算机二级考试科目有哪些 什么时候出成绩...
- 计算机考研备考指南,计算机专业考研复习指南篇
- python语言的语法_Python语言 中的一些特殊语法
- spring mail 发送邮件
- python3(六)监督学习
- 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
- python 机器学习管道_构建机器学习管道-第1部分
- 深入浅出SQL(2)——select、update…
- 怎样在sqlite3上执行SQL语句