题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1074

题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J的时间为:(aJ-aI)^3,存在负环。问从第一个城市到达第k个城市所花的时间,如果不能到达,或者时间小于3输出?否则输出所花的时间

只要用spfa判断一下负环然后和负环上点相关联的点都可以实现距离无线小所以如果是关联点标记一下。

如果遇到标记点就没有必要再入队,减少复杂度

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdio>
#include <queue>
using namespace std;
const long long inf = 999999999;
int n , m , q , x , y;
long long val[210] , dis[210];
long long GETS(int x , int y) {
return (val[x] - val[y]) * (val[x] - val[y]) * (val[x] - val[y]);
}
struct TnT {
int u , v , next;
long long w;
}T[40050];
int head[210] , cnt[210] , e;
void init() {
e = 0;
for(int i = 1 ; i <= n ; i++) {
head[i] = -1;
}
}
void add(int u , int v , long long w) {
T[e].v = v;
T[e].w = w;
T[e].next = head[u];
head[u] = e++;
}
bool vis[210] , cir[210];
void dfs(int x) {
cir[x] = true;
for(int i = head[x] ; i != - 1 ; i = T[i].next) {
if(!cir[T[i].v]) {
dfs(T[i].v);
}
}
}
void spfa(int sta) {
memset(vis , false , sizeof(vis));
memset(cnt , 0 , sizeof(cnt));
memset(cir , false , sizeof(cir));
queue<int>q;
q.push(sta);
cnt[sta]++;
vis[sta] = true;
dis[sta] = 0;
while(!q.empty()) {
int m = q.front();
vis[m] = false;
q.pop();
for(int i = head[m] ; i != - 1 ; i = T[i].next) {
int v = T[i].v ;
long long w = T[i].w;
if(cir[v])
continue;
if(dis[v] > dis[m] + w) {
dis[v] = dis[m] + w;
if(!vis[v]) {
cnt[v]++;
vis[v] = true;
q.push(v);
if(cnt[v] > n)
dfs(v);
}
}
}
}
}
int main() {
int t , ans = 0 , gg;
scanf("%d" , &t);
while(t--) {
ans++;
scanf("%d" , &n);
for(int i = 1 ; i <= n ; i++) {
dis[i] = inf;
}
init();
for(int i = 1 ; i <= n ; i++) {
scanf("%lld" , &val[i]);
}
scanf("%d" , &m);
for(int i = 1 ; i <= m ; i++) {
scanf("%d%d" , &x , &y);
add(x , y , GETS(y , x));
}
printf("Case %d:\n" , ans);
scanf("%d" , &q);
spfa(1);
for(int i = 1 ; i <= q ; i++) {
scanf("%d" , &gg);
if(cir[gg] || dis[gg] == inf || dis[gg] < 3) {
printf("?\n");
}
else {
printf("%lld\n" , dis[gg]);
}
}
}
return 0;
}

lightoj 1074 - Extended Traffic(spfa+负环判断)的更多相关文章

  1. LightOJ - 1074 Extended Traffic (SPFA+负环)

    题意:N个点,分别有属于自己的N个busyness(简称b),两点间若有边,则边权为(ub-vb)^3.Q个查询,问从点1到该点的距离为多少. 分析:既然是差的三次方,那么可能有负边权的存在,自然有可 ...

  2. LightOj 1074 Extended Traffic (spfa+负权环)

    题目链接: http://lightoj.com/volume_showproblem.php?problem=1074 题目大意: 有一个大城市有n个十字交叉口,有m条路,城市十分拥挤,因此每一个路 ...

  3. LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)

    题目链接:https://cn.vjudge.net/contest/189021#problem/O 题目大意:有n个站点,每个站点都有一个busyness,从站点A到站点B的花费为(busynes ...

  4. LightOJ 1074 Extended Traffic SPFA 消负环

    分析:一看就是求最短路,然后用dij,果断错了一发,发现是3次方,有可能会出现负环 然后用spfa判负环,然后标记负环所有可达的点,被标记的点答案都是“?” #include<cstdio> ...

  5. LightOJ 1074 - Extended Traffic (SPFA)

    http://lightoj.com/volume_showproblem.php?problem=1074 1074 - Extended Traffic   PDF (English) Stati ...

  6. spfa负环判断

    正常spfa中加入time数组,循环判断一个点是否入队并更新了n次以上注意是 > n!!其余的没有什么问题 扩展的还有,寻找所有负环上的点,这个可以在spfa中time 发现负环的时候,对那个点 ...

  7. LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)

    Extended Traffic 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/O Description Dhaka city ...

  8. (简单) LightOJ 1074 Extended Traffic,SPFA+负环。

    Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...

  9. SPFA(负环) LightOJ 1074 Extended Traffic

    题目传送门 题意:收过路费.如果最后的收费小于3或不能达到,输出'?'.否则输出到n点最小的过路费 分析:关键权值可为负,如果碰到负环是,小于3的约束条件不够,那么在得知有负环时,把这个环的点都标记下 ...

随机推荐

  1. export,export default,module.exports,import,require之间的区别和关联

    module.exports Node 应用由模块组成,采用 CommonJS 模块规范.根据这个规范,每个文件就是一个模块,有自己的作用域.在这些文件里面定义的变量.函数.类,都是私有的,对外不可见 ...

  2. CentOS7使用yum安装ceph rpm包

    1. 安装centos7对扩展repo的支持yum install yum-plugin-priorities保证下面的选项是开启的[main]enabled = 1 2. 安装 release.ke ...

  3. kubernetes离线包分析

    k8s离线包解析 产品地址 鸣谢 大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去. 感谢大家对付费产品的认可,尊重付费 产品介绍 我们专注于k8 ...

  4. 客户端埋点实时OLAP指标计算方案

    背景 产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量 ...

  5. SQL Labs刷题补坑记录(less1-less30)

    补坑加1,这几天快速刷一下sqllabs 来巩固下sql注入基础吧,也算是把很久以前没刷的过一遍,do it! 第一部分: LESS1: 直接报错,有回显的注入, http://localhost/s ...

  6. android——实现跨程序访问数据

    使用之前的SQLite存储的应用程序.首先需要在这个应用程序中创建内容提供器,右击com.example.administrator.exp7包→New→Other→Content Provider, ...

  7. Jmeter使用csv文件读取测试数据

    最近有同事在测试过程中遇到需要造批量测试数据的问题,这些数据往往是同一种单据,但是单据的内容不同,如果手工创建就比较费时费力.那我们用jmeter的csv文件来读取测试数据就完美解决了这个问题. 我们 ...

  8. eclipse安装STS插件遇到的问题

    eclipse安装STS插件 第一次接触springboot,对于用惯了eclipse写代码的人来说,接受IDEA确实还要多花点时间去改变下,因为IDEA确实会节省下不必要的写代码时间.废话少说,直接 ...

  9. K8S搭建-1 Master 2 Workers(dashboard+ingress)

    本文讲述k8s最新版的搭建(v1.15.2) 分如下几个topic步骤: 各个节点的基本配置 master节点的构建 worker节点的构建 安装dashboard 安装ingress 常见命令 do ...

  10. 深入理解Nginx及使用Nginx实现负载均衡

    前言: 最近在部署项目时要求实现负载均衡,有趣的是发现网上一搜全部都是以下类似的配置文件 upstream localhost{ server 127.0.0.1:8080 weight=1; ser ...