题目链接: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. ASP.NET Core 中的 依赖注入介绍

    ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...

  2. 洛谷P2996 [USACO10NOV]拜访奶牛Visiting Cows

    题目 树形dp 设f[i][j]表示走到第i号节点的最大权值 j为0/1表示这个点选或者不选 如果这个点不选 就从他的子树里的选或者不选选最大 如果这个点选 就加上他子树的不选 f[x][0] += ...

  3. CSP2019 树的重心 题解

    本题当然可以通过大力讨论每棵子树的size的大小关系,然后用各种数据结构暴力维护.但是我更倾向于用一种更为性质的做法. 首先讲一下我在考场上想到的做法(没写).就是考虑换根,在换根的过程中计算每一条边 ...

  4. [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串

    Given a string s , find the length of the longest substring t  that contains at most 2 distinct char ...

  5. AtCoder Grand Contest 036 简要题解

    从这里开始 比赛目录 Problem A Triangle 考虑把三角形移到和坐标轴相交,即 然后能够用坐标比较简单地计算面积,简单构造一下就行了. Code #include <bits/st ...

  6. java web开发需要注意的地方

    java需要注意的 1.字符串值相等比较 c#用双等号(==)来进行 字符串值相等比较.如下: string a="3"; string b="3"; if(a ...

  7. 如何修改SQL Server 2008 R2数据库的内存

    本篇经验将和大家介绍如何修改SQL Server 2008 R2数据库的内存,希望对大家的工作和学习有所帮助! 工具/原料   SQL Sever 2008 R2数据库已安装 方法/步骤   1 打开 ...

  8. ROS融合IMU笔记

    ROS官网有一个叫robot_pose_ekf的包,是专门处理传感器融合的包,具体介绍:http://wiki.ros.org/robot_pose_ekf 其中主要功能是订阅主题包括odom(里程计 ...

  9. 书籍推荐-An introduction to Data Science

    为什么要读这本书? 该书是由我们老师推荐的,通过学习此数,可以了解R语言的使用,也可以知道基本的数据分析方法. 看到Creating a Data Set in R -- 24页面

  10. vertica 设置最大会话数

    默认会话数最大值55,如果超过了,就会报如下错误: com.vertica.support.exceptions.NonTransientConnectionException: [Vertica][ ...