给定一张边带权的有向图。从节点\(1\)出发,每经过一条边一次,得分加上这条边的边权。(可以多次经过,多次累加

必须在点\(n\)结束游戏

判断是否能使得分无限大,如果否,求最大得分。

sol

题目所给的边权可以为负,\(dfs\)判环+\(DAG\)上\(DP\)最长路是补锌的(?

然后很容易想到边权取相反数,跑一遍\(SPFA\)判负环+求最短路。哇,sb题,秒了

然后喜提WA QAQ

被坑了————————————————

\(SPFA\)不可行的原因是,题目要求路径从节点\(1\)到节点\(n\)。判出负环就输出\(inf\)会少考虑一种情况,那就是负环并不在\(1\)到\(n\)的路径上。

所以我们用\(BellmanFord\)

先进行\(n-1\)轮松弛,记录此时的\(dis[n]\)

再进行\(n-1\)轮松弛()新的\(dis[n]\)发生了变动,当且仅当在\(1\)到\(n\)的路径上存在负环。

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdio>
  5. #include <cmath>
  6. using namespace std;
  7. int n,m;
  8. #define MAXN (2007)
  9. #define MAXM (4014)
  10. struct qwq
  11. {
  12. int nex,to,w;
  13. }e[MAXM];
  14. int h[MAXN],tot=0;
  15. inline void add(int x,int y,int z)
  16. {
  17. e[++tot].to=y;
  18. e[tot].w=z;
  19. e[tot].nex=h[x];
  20. h[x]=tot;
  21. }
  22. long long dis[MAXN];
  23. int coun[MAXN];
  24. bool vis[MAXN];
  25. #include <queue>
  26. #define inf (long long)((long long)(1e16)+233)
  27. queue<int> q;
  28. inline void INIT() { for (int i=1;i<=n;i++) dis[i]=inf; }
  29. inline long long spfa()//关于SPFA,_____________
  30. {
  31. INIT();
  32. q.push(1);
  33. vis[1]=true;
  34. dis[1]=0;
  35. int x;
  36. while (!q.empty())
  37. {
  38. x=q.front();
  39. vis[x]=false;
  40. q.pop();
  41. for (int i=h[x],y;i;i=e[i].nex)
  42. {
  43. y=e[i].to;
  44. // printf("x:%d dis:%lld y:%d\n",x,dis[x],y);
  45. if (dis[y]>dis[x]+e[i].w)
  46. {
  47. dis[y]=dis[x]+e[i].w;
  48. if (!vis[y])
  49. {
  50. coun[y]=coun[x]+1;
  51. if (coun[y]>=n) return (inf<<1);
  52. vis[y]=true;
  53. q.push(y);
  54. }
  55. }
  56. }
  57. }
  58. return dis[n];
  59. }
  60. inline long long BF()
  61. {
  62. INIT();
  63. dis[1]=0;
  64. for (int k=1;k<n;k++)
  65. for (int x=1;x<=n;x++)
  66. for (int i=h[x],y;i;i=e[i].nex)
  67. {
  68. y=e[i].to;
  69. if (dis[y]>dis[x]+e[i].w) dis[y]=dis[x]+e[i].w;
  70. }
  71. long long ans=dis[n];
  72. for (int k=1;k<n;k++)
  73. for (int x=1;x<=n;x++)
  74. for (int i=h[x],y;i;i=e[i].nex)
  75. {
  76. y=e[i].to;
  77. if (dis[y]>dis[x]+e[i].w) dis[y]=dis[x]+e[i].w;
  78. }
  79. if (ans!=dis[n]) return inf<<1;
  80. else return ans;
  81. }
  82. signed main()
  83. {
  84. scanf("%d%d",&n,&m);
  85. for (int i=1,x,y,z;i<=m;i++)
  86. {
  87. scanf("%d%d%d",&x,&y,&z);
  88. add(x,y,-z);
  89. }
  90. long long ans=BF();
  91. if (ans==inf<<1) puts("inf");
  92. else printf("%lld\n",-ans);
  93. return 0;
  94. }

AtCoder Beginner Contest 061 - D Score Attack的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  3. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  4. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  5. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  6. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  7. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  10. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

随机推荐

  1. 探究Tomcat

    一.什么是Tomcat? 用来装载javaWeb程序,可以称它为Web容器.是一个运行java的网络服务器,底层是Sochet的一个程序,他也是JSP和Servlet的一个容器. 二.什么要用Tomc ...

  2. Java基础学习——Scanner

    import java.util.Scanner; public class HelloWord{ public static void main(String[] args){ Scanner s= ...

  3. verilog 概念版

    一.MCU芯片的定义 MCU芯片是指微控制单元(MicrocontrollerUnit:MCU),又称单片微型计算机或者单片机,是把中央处理器的频率与规格做适当缩减,并将内存.计数器.USB.A/D转 ...

  4. React-Hook知识整理与总结

    1.useState:让函数式组件拥有状态 2.useEffect:副作用,取代生命周期 3.useContext:跨组件共享数据 4.useCallback:性能优化 5.useMemo:性能优化 ...

  5. 2021SWPUCTF-WEB(三)

    error ​ 双引号没有提示的注入,,那就是报错注入了,肯定是个恶心的东西呜呜呜 ?id=1' and updatexml(1,concat(0x7e,(select right(flag,30) ...

  6. 后端004-JWT工具类的编写

    登录功能采用springsecurity安全框架和jwt令牌 首先需要添加依赖信息 在yml中添加JWT的配置文件 有了上述的配置之后,我们可以准备一个JWT的工具类,方便后面和JWT相关的内容去使用 ...

  7. ASP.NET Web应用程序(.NET Framework)开发网站

    1.创建项目 2.控制器脚本说明 [FromBody]JObject value:JObject此类型默认为string,但是string无法正常解析复杂类型的Json数据,所以修改为JObject类 ...

  8. IDEA下Maven项目中通过JDBC连接MySQL数据库

    ### 1. 在当前Maven项目的pom.xml文件中导入数据库依赖: ```<dependency> <groupId>mysql</groupId> < ...

  9. Git 仓库7K stars!学Java开源项目austin要多久?

    我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为职业八股文选手 开源项目消息推送平台austin仓库地址: 消息推送平台推送下发[邮件][短信][微信服务号][微信小程序][企业微 ...

  10. 在golang中如何正确判断接口是否为nil

    本文主要来分析一下在golang中,如何判断interface是否为nil,以及相关注意事项. 正常情况下,我们声明一个interface类型的变量,默认值将会返回nil,以golang自带的io.W ...