嘟嘟嘟

01分数规划之最优比率环。

主要是发一下基于dfs的spfa。跑的贼快,原来总用时2000多ms还TLE了两个点,改成dfs后总用时直降43ms!

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<cstdlib>
  7. #include<cctype>
  8. #include<stack>
  9. #include<queue>
  10. #include<vector>
  11. using namespace std;
  12. #define enter puts("")
  13. #define space putchar(' ')
  14. #define Mem(a, x) memset(a, x, sizeof(a))
  15. #define rg register
  16. typedef long long ll;
  17. typedef double db;
  18. const int INF = 0x3f3f3f3f;
  19. const db eps = 1e-;
  20. const int maxn = 7e3 + ;
  21. const int maxe = 4e4 + ;
  22. inline ll read()
  23. {
  24. ll ans = ;
  25. char ch = getchar(), las = ' ';
  26. while(!isdigit(ch)) las = ch, ch = getchar();
  27. while(isdigit(ch)) ans = (ans << ) + (ans << ) + ch - '', ch = getchar();
  28. if(las == '-') ans = -ans;
  29. return ans;
  30. }
  31. inline void write(ll x)
  32. {
  33. if(x < ) putchar('-'), x = -x;
  34. if(x >= ) write(x / );
  35. putchar(x % + '');
  36. }
  37.  
  38. int n, m;
  39. struct Edge
  40. {
  41. int nxt, to, v, p;
  42. }e[maxe];
  43. int head[maxn], ecnt = -;
  44. void addEdge(int x, int y, int v, int p)
  45. {
  46. e[++ecnt] = (Edge){head[x], y, v, p};
  47. head[x] = ecnt;
  48. }
  49.  
  50. bool in[maxn];
  51. db dis[maxn];
  52. bool judge(db x, int now)
  53. {
  54. in[now] = ;
  55. for(int i = head[now]; i != -; i = e[i].nxt)
  56. {
  57. if(dis[e[i].to] > x * (db)e[i].p - (db)e[i].v + dis[now])
  58. {
  59. if(in[e[i].to]) return ;
  60. dis[e[i].to] = x * (db)e[i].p - (db)e[i].v + dis[now];
  61. in[e[i].to] = ;
  62. if(judge(x, e[i].to)) return ;
  63. }
  64. }
  65. in[now] = ;
  66. return ;
  67. }
  68.  
  69. int main()
  70. {
  71. Mem(head, -);
  72. n = read(); m = read();
  73. for(int i = ; i <= m; ++i)
  74. {
  75. int x = read(), y = read(), v = read(), p = read();
  76. addEdge(x, y, v, p);
  77. }
  78. for(int i = ; i <= n; ++i) addEdge(, i, , ); //搞一个超级源点
  79. db L = , R = ;
  80. while(R - L > eps)
  81. {
  82. db mid = (L + R) / ;
  83. Mem(dis, 0x3f); Mem(in, ); dis[] = ;
  84. if(judge(mid, )) L = mid;
  85. else R = mid - eps;
  86. }
  87. if(L < eps) write(-), enter;
  88. else printf("%.1lf\n", L);
  89. return ;
  90. }

luogu P1768 天路的更多相关文章

  1. Luogu P1768 天路 0/1分数规划+dfs spfa

    “那是一条神奇的天路诶~~把第一个神犇送上天堂” 怕不是某大佬早就A了这题,然鹅我又调了很久很久... 好吧就是0/1分数规划,但是跑的dfs的spfa(好像题解说bfs过不了????不知) 发现把s ...

  2. luogu P1768 天路 |01分数规划+负环

    题目描述 言归正传,小X的梦中,他在西藏开了一家大型旅游公司,现在,他要为西藏的各个景点设计一组铁路线.但是,小X发现,来旅游的游客都很挑剔,他们乘火车在各个景点间游览,景点的趣味当然是不用说啦,关键 ...

  3. 洛谷 P1768 天路

    P1768 天路 题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于 ...

  4. 浴谷 P1768 天路

    P1768 天路 题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于 ...

  5. [P1768]天路(分数规划+SPFA判负环)

    题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...

  6. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  7. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  8. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  9. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

随机推荐

  1. 解决IE9 IE8的跨域 请求问题

    /// <summary> /// 根据url获取对应的HTML /// </summary> /// <param name="url">&l ...

  2. JAVA 中 if和while的区别

    while和if本身就用法不同,一个是循环语句,一个是判断语句. if 只做判断,判断一次之后,便不会再回来了while 的话,循环,直到结果为false,才跳出来 链表的结构,要一直读下去,直到读完 ...

  3. C++11并发编程:原子操作atomic

    一:概述 项目中经常用遇到多线程操作共享数据问题,常用的处理方式是对共享数据进行加锁,如果多线程操作共享变量也同样采用这种方式. 为什么要对共享变量加锁或使用原子操作?如两个线程操作同一变量过程中,一 ...

  4. 这真的该用try-catch吗?

    前言 我有个技能,就是把“我”说的听起来特别像“老子”. 以前是小喽啰的时候,会跟领导说“我!不加班.”,听起来就像“老子不加班!”一样.到最后发现,我确实没有把计划内的工作拖到需要加班才能完成,这个 ...

  5. PHP Mongodb API参考

    <?php /*** Mongodb类** examples: * $mongo = new HMongodb("127.0.0.1:11223"); * $mongo-&g ...

  6. pat02-线性结构3. 求前缀表达式的值(25)

    02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法.中缀表示法和后缀表示法 ...

  7. HTML <frameset>不同frame之间传值

    布局 左右30%--70%,点击左边的复选框,右边显示相应的反应. 代码 main2.html <html> <frameset cols="30%, 70%"& ...

  8. Python快速入门_1

    注释 # 用#号字符开头注释单行 """ 三个引号可以注释多行 三个引号可以注释多行 三个引号可以注释多行 """ 原始数据类型和运算符 ( ...

  9. 日期控件html

    日期控件多的是,这里收录的是最简单的一种 <html> <head> <script type="text/javascript"> funct ...

  10. python学习(五)--打印错误信息

    from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...