AtCoder Beginner Contest 061 - D Score Attack
给定一张边带权的有向图。从节点\(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的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- 线程池使用、countDownLatch、以及数据库批量插入 添加配置优化插入与计算
//新建线程池ThreadPoolExecutor cpuThreadPoolExecutor = ThreadUtil.getCpuThreadPoolExecutor(); //使用Countdo ...
- git cherry-pick适用场景详解
前提条件:有2个分支,分别是master,hotfix,其中master是用于生产环境的发布分支. 场景1:生产环境hotfix. T1时刻,使用master分支发布生产.当时的HEAD的commit ...
- LocalDateTime接收前端String格式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; 实体类属性添加注解,前 ...
- intellij idea中怎么没有git版本控制设置项
在使用intellij idea的时候想要使用git进行版本控制,但是在设置项和界面没有发现相关内容,怎么回事呢? 我们先打开电脑,从桌面的快捷方式打开intellij idea,进入到intelli ...
- Java mysql批量关联插入数据
mysql 关联批量插入数据 INSERT INTO 表1 ( id, name, addTime ) SELECT UUID( ) AS id, v_Name, now( ) FROM 表2;
- java 将Excel数据读取到ListMap
将Excel数据读取到ListMap /** * 将Excel数据读取到ListMap * @param file */ public static List<Map<String, Ob ...
- C++学习流程
一.初级入门阶段 数据类型.变量.内存布局.指针基础: 字符串.一维数组.二维数组: 一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针: 结构体.文件的使用: 动态库的封装和设计: 函数 ...
- 【Unity】Timeline探索记(4)第二个例子——动作特写/子弹时间
写在前面 这次例子参考这篇实现博文(附带项目下载),博文前面介绍非常具体,可惜后面特写轨实现代码不是按照我想要的标准四大件(data.mixer.clip.track)来组织的,所以这里我略过介绍,只 ...
- logic 运算符
- 2019之VLC3.071版本Ubuntu 18-win32-64为编译经验记录
编译环境:1.win7+vmware15+Ubuntu 18 64bit虚拟系统(16也可以)2.gcc 7.4 (大于6即可)3.mingw-w64 5.3.0,及其相关联的x86-64的tool, ...