给定一张边带权的有向图。从节点\(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\)的路径上存在负环。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n,m;
#define MAXN (2007)
#define MAXM (4014)
struct qwq
{
int nex,to,w;
}e[MAXM];
int h[MAXN],tot=0;
inline void add(int x,int y,int z)
{
e[++tot].to=y;
e[tot].w=z;
e[tot].nex=h[x];
h[x]=tot;
}
long long dis[MAXN];
int coun[MAXN];
bool vis[MAXN];
#include <queue>
#define inf (long long)((long long)(1e16)+233)
queue<int> q;
inline void INIT() { for (int i=1;i<=n;i++) dis[i]=inf; }
inline long long spfa()//关于SPFA,_____________
{
INIT();
q.push(1);
vis[1]=true;
dis[1]=0;
int x;
while (!q.empty())
{
x=q.front();
vis[x]=false;
q.pop();
for (int i=h[x],y;i;i=e[i].nex)
{
y=e[i].to; // printf("x:%d dis:%lld y:%d\n",x,dis[x],y);
if (dis[y]>dis[x]+e[i].w)
{
dis[y]=dis[x]+e[i].w;
if (!vis[y])
{
coun[y]=coun[x]+1;
if (coun[y]>=n) return (inf<<1);
vis[y]=true;
q.push(y);
}
}
}
}
return dis[n];
}
inline long long BF()
{
INIT();
dis[1]=0;
for (int k=1;k<n;k++)
for (int x=1;x<=n;x++)
for (int i=h[x],y;i;i=e[i].nex)
{
y=e[i].to; if (dis[y]>dis[x]+e[i].w) dis[y]=dis[x]+e[i].w;
}
long long ans=dis[n];
for (int k=1;k<n;k++)
for (int x=1;x<=n;x++)
for (int i=h[x],y;i;i=e[i].nex)
{
y=e[i].to;
if (dis[y]>dis[x]+e[i].w) dis[y]=dis[x]+e[i].w;
}
if (ans!=dis[n]) return inf<<1;
else return ans;
}
signed main()
{
scanf("%d%d",&n,&m);
for (int i=1,x,y,z;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,-z);
}
long long ans=BF();
if (ans==inf<<1) puts("inf");
else printf("%lld\n",-ans);
return 0;
}

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. Python+Django(1)——建立项目

    为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录(Python 3): 运行模块venv 来创建一个名为ll_env的虚拟环境:python -m venv ll_en ...

  2. PLC入门笔记11

    1.开关? 输入 拨杆开关.点动开关.常开.常闭开关 霍尔接近开关(磁场 N极导通 3线+-DC24V ).电容接近开关(非金属).电感接近开关(金属) 2.输入接线? NPN型,不需要外接电源,直接 ...

  3. Oracle账户被锁住,解锁

    转载自:https://blog.csdn.net/weixin_43464743/article/details/121226334 方法一PLSQL解锁1.用dba用户登录plsql.2.左侧选择 ...

  4. pintia 3-7-5 逆波兰表达式求值 (20 分)

    3-7-5 逆波兰表达式求值 (20 分) 逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面 的描述程序(算式)的方法.举个例子,我们平常用中缀表示法描述的算式(1 + ...

  5. java 为 枚举类型euum 的 某个int(Integer)字段做自增 Identity

    前人所做的 java中枚举类型的自增: 链接 : https://www.h5w3.com/177055.html 1 enum MSG_TYPE { 2 MSG_LOGIN(500), 3 MSG_ ...

  6. little bug

    1 python script can be run in shell console while not in calling shell scripts wfile = codecs.open(n ...

  7. 006Java程序运行机制

    006Java程序运行机制 高级程序语言分为编译型和解释型两种,Java这两种特性都具备. 编译型还是解释型取决于翻译的时机. 以看一本外语书为例: 编译型:先把整本书翻译成中文版再看. 解释型:请个 ...

  8. C# EF框架的入门使用

    如何构建数据模型 新建项 ADO.NET 实体模型 设置链接 链接字符串需要选择"是,包含敏感数据 注意:EF的框架引用的表应该要存在主键,程序引用中要包含 using System.Dat ...

  9. 联想拯救者R9000P风扇拉满加强散热的方法

    管软可以开野兽模式,但是风扇还不是最猛的.锻炼的时候为了保护硬件,牺牲风扇和噪音吧,方法如下:下载 RWEverything运行RW.exe点击笔记本图标+EC文字的图案 修改:B0+0D对应的数据, ...

  10. Go_day07

    Go常用包 包的本质:创建不同的文件夹,来存放程序文件 Go语言的源码复用建立再包package基础之上 main包 Go语言的入口 main()函数所在的包必须是main包 main包需要引用代码, ...