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判负环)相关推荐

  1. POJ 3259 Wormholes SPFA判负环

    思路:SPFA判负环 数组不要开太小-- (后面附一组测试数组) // by SiriusRen #include <queue> #include <cstdio> #inc ...

  2. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

  3. dfs版SPFA判负环

    例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...

  4. 【2019icpc南京站网络赛 - H】Holy Grail(最短路,spfa判负环)

    题干: As the current heir of a wizarding family with a long history,unfortunately, you find yourself f ...

  5. 天路(01规划+SPFA判负环)

    传送门 公式图片来自洛谷题解 因为求V之和与P之和的比值的最大值.这个值不超过200 考虑到二分答案,设ans为最大值,则有 可以看出是01分数规划 那么每次就重新分配边的权值: ans*ci-vi ...

  6. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)

    BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详(并不)解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多 ...

  7. POJ 2240 Arbitrage(SPFA判正环)

    POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...

  8. bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环

    Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...

  9. poj3259 Wormholes(spfa判负环)

    题意:给m条路(S,E,T)代表点S.E之间双向边权重为T,紧接着给W个虫洞(S,E,T)代表S到E的有向边可以回到T秒前即权重为-T,问能不能通过虫洞看到看到初始的自己,即能不能回到初始点所在的时间 ...

最新文章

  1. 接受者操作特征曲线ROC
  2. JavaScript正则表达式(2)
  3. UI实用素材|电子商务界面模板
  4. NPOI读写Excel sheet操作
  5. mysql 5.5主从同步_MySQL 5.5主从同步
  6. 20145324 20145325《信息安全系统设计基础》实验二 固件设计
  7. 8.PHP核心技术与最佳实践 --- 缓存
  8. 软件园区网络设计之网络总体设计
  9. Java课程设计——日历的设计与实现
  10. 一天搞懂深度学习(李宏毅)-学习笔记
  11. SQL注入风险高,手写 SQL 须谨慎
  12. 非对称加密算法 (RSA、DSA、ECC、DH)
  13. c语言将阿拉伯数字变为大写,使用C#实现阿拉伯数字到大写中文的转换
  14. 中国地图及各省市县地图json下载地址
  15. 硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
  16. Hbase 内置过滤器
  17. 【文本匹配】之 经典ESIM论文详读
  18. kermit 安装 配置 使用
  19. cadence——基本操作1
  20. 常用网址收藏 (zz)

热门文章

  1. 计算机通信技术用到的文献,计算机技术在通信中的应用与发展
  2. 计算机2级学的是什么时候出来的,2019计算机二级考试科目有哪些 什么时候出成绩...
  3. 计算机考研备考指南,计算机专业考研复习指南篇
  4. python语言的语法_Python语言 中的一些特殊语法
  5. spring mail 发送邮件
  6. python3(六)监督学习
  7. 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
  8. python 机器学习管道_构建机器学习管道-第1部分
  9. 深入浅出SQL(2)——select、update…
  10. 怎样在sqlite3上执行SQL语句