题目链接:https://vjudge.net/problem/LightOJ-1074

思路:(busyness of destination - busyness of source)3 可能会是负值,那么可能出现负环,

需要SFPA来解决,我们需要把负环中的点能到达其他点都标记为‘?’点,因为这些点在有限次循环后

会变成负值,一定小于3,可以用dfs来遍历能经过的所有点。


 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std; typedef long long LL;
#define inf 1e9
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
int head[N];
int tot[N];
bool vis[N];
int tmp[N];
bool bad[N];
int dis[N];
stack<int> sta;
int cnt;
int bus[N];
int n,m; struct Edge{
int to;
int w;
int next;
}e[N * N]; void add(int u,int v,int w){
e[cnt].to = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt++;
}
//遍历所有能到达的点
void dfs(int u){ bad[u] = true; for(int o = head[u]; ~o; o = e[o].next){
if(!bad[e[o].to])
dfs(e[o].to);
}
} void SPFA(){ while(!sta.empty()) sta.pop();
rep(i,,n) vis[i] = false;
rep(i,,n) bad[i] = false;
rep(i,,n) dis[i] = inf;
rep(i,,n) tot[i] = ;
dis[] = ;
sta.push(); int u,v,w;
while(!sta.empty()){
u = sta.top();
sta.pop();
if(bad[u]) continue; //‘?’点
vis[u] = false; for(int o = head[u]; ~o; o = e[o].next){
w = e[o].w;
v = e[o].to; if(!bad[v]/* '?'点 */ && dis[u] + w < dis[v]){
dis[v] = dis[u] + w;
// printf("this is dis[%d] = %d\n",v,dis[v]);
if(!vis[v]){
if(++tot[v] > n) dfs(v);
else{
vis[v] = true;
sta.push(v);
}
}
}
}
}
} void print(int o){ int tot;
scanf("%d",&tot);
rep(i,,tot){
scanf("%d",&tmp[i]);
}
printf("Case %d:\n",o);
rep(i,,tot){
if(bad[tmp[i]] || dis[tmp[i]] < || dis[tmp[i]] == inf) printf("?\n");
else printf("%d\n",dis[tmp[i]]);
}
} int main(){ int T;
scanf("%d",&T); int u,v;
rep(o,,T){
scanf("%d",&n);
rep(i,,n){
scanf("%d",&bus[i]);
} rep(i,,n) head[i] = -;
cnt = ; scanf("%d",&m);
rep(i,,m){
scanf("%d%d",&u,&v);
add(u,v,(bus[v] - bus[u])*(bus[v] - bus[u])*(bus[v] - bus[u]));
} SPFA();
print(o);
} getchar(); getchar();
return ;
}

Extended Traffic LightOJ - 1074的更多相关文章

  1. Extended Traffic LightOJ - 1074 spfa判断负环

    //判断负环 在负环内的城市输出? #include <iostream> #include <queue> #include <cstdio> #include ...

  2. Extended Traffic LightOJ - 1074 (经典SPFA问题)

    题目大意:每一个城市都有一定的繁荣度,然后给出m条有向边i->j,定义这条边的权值为pow(arr[j]-arr[i],3),然后给你q个询问,每个询问输入一个x. 然后问你点1到x的距离,如果 ...

  3. LightOJ 1074 - Extended Traffic (SPFA)

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

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

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

  5. Light OJ 1074:Extended Traffic(spfa判负环)

    Extended Traffic 题目链接:https://vjudge.net/problem/LightOJ-1074 Description: Dhaka city is getting cro ...

  6. lightoj 1074 spfa判断负环

     Extended Traffic Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Sub ...

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

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

  8. lightoj 1074 - Extended Traffic(spfa+负环判断)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1074 题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J ...

  9. SPFA(负环) LightOJ 1074 Extended Traffic

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

随机推荐

  1. Attention篇(二)

    主要是对<Attention is all you need>的分析 结合:http://www.cnblogs.com/robert-dlut/p/8638283.html  以及自己的 ...

  2. select标签刷新后保持之前选择值

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <selec ...

  3. [LeetCode] 347. Top K Frequent Elements 前K个高频元素

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

  4. Magisk —— 安卓新一代的第三方拓展,systemless模式

    Magisk由宝岛台湾学生 topjohnwu 开发, XDA主贴:https://forum.xda-developers.com/apps/magisk 使用方法:第三方rec刷入zip 介绍: ...

  5. C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)

    ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs. ...

  6. SpringCloud-ZUUL网关Cookie被拦截

    在application.properties文件中添加配置(注意后面的值为空) zuul.sensitiveHeaders= org.springframework.cloud.netflix.zu ...

  7. 深入理解C语言 - 指针使用的常见错误

    在C语言中,指针的重要性不言而喻,但在很多时候指针又被认为是一把双刃剑.一方面,指针是构建数据结构和操作内存的精确而高效的工具.另一方面,它们又很容易误用,从而产生不可预知的软件bug.下面总结一下指 ...

  8. 基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒)

    本篇文章给大家带来的内容是关于基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 公司需要实现X分钟内每隔Y秒 ...

  9. Redis学习之Redis服务器数据库实现

    本文内容: 1.Redis服务器保存数据库的方法 2.客户端切换数据库的方法 3.数据库保存键值对的方法 4.数据库的添加,删除,查看,更新操作的实现方法 5.服务器保存键的过期时间的方法 6.服务器 ...

  10. 项目Gradle版本从4.4升级到4.6

    一.背景 Gralde版本与AGP(Android Gradle Plugin)版本具有一定的对应关系,原因在于AGP实质上作为Gradle的插件,依赖于Gradle作为宿主.因此,不同的AGP版本需 ...