题目链接:https://cn.vjudge.net/contest/189021#problem/O

题目大意:有n个站点,每个站点都有一个busyness,从站点A到站点B的花费为(busyness of B  -  busyness of A)^3。给出个站点间的连通关系(单向),有q次询问,每次询问站点1到x(1<=x<=n)的最小花费,若x点无法到达或者花费小于3则输出‘?’。

解题思路:还是最短路问题,但是图中有负环的存在,所以要判断负环,每次发现负环上的点(qcnt[i]>=n)就用dfs标记该负环上所有的点(负环上的点花费肯定小于3),可以使用spfa来解决。

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int N=2e2+;
const int INF=0x3f3f3f3f; int n;
int dis[N],busy[N],qcnt[N],cost[N][N];
bool vis[N],cir[N]; //计算j,k两点间的收费
int cal_amt(int j,int i){
return (busy[i]-busy[j])*(busy[i]-busy[j])*(busy[i]-busy[j]);
}
//标记所有x点能到达的点
void dfs(int x){
cir[x]=true;
for(int i=;i<=n;i++){
if(cost[x][i]==&&!cir[i])
dfs(i);
}
} bool spfa(int s){
memset(dis,0x3f,sizeof(dis));
memset(vis,false,sizeof(vis));
memset(qcnt,,sizeof(qcnt));
dis[s]=;
queue<int>q;
q.push(s);
while(!q.empty()){
int k=q.front();
q.pop();
vis[k]=false;
for(int i=;i<=n;i++){
//跳过负环上的点
if(i==k||cost[k][i]==-||cir[i])
continue;
if(dis[k]+cal_amt(k,i)<dis[i]){
dis[i]=dis[k]+cal_amt(k,i);
if(!vis[i]){
q.push(i);
qcnt[i]++;
//若存在负环,则dfs标记所有负环上的可达点
if(qcnt[i]>=n)
dfs(i);
vis[i]=true;
}
}
}
}
} int main(){
int t,cas=;
scanf("%d",&t);
while(t--){
memset(cost,-,sizeof(cost));
memset(cir,false,sizeof(cir));
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&busy[i]);
}
int m;
scanf("%d",&m);
for(int i=;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
cost[a][b]=;
}
int q;
scanf("%d",&q);
spfa();
printf("Case %d:\n",++cas);
for(int i=;i<=q;i++){
int des;
scanf("%d",&des);
//若该点在负环上、或者无法到达、或者收费小于3输出'?'
if(cir[des]||dis[des]==INF||dis[des]<)
puts("?");
else
printf("%d\n",dis[des]);
}
}
return ;
}

LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)的更多相关文章

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

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

  2. LightOJ 1074 Extended Traffic SPFA 消负环

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

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

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

  4. LightOJ - 1074 Extended Traffic(标记负环)

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

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

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

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

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

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

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

  8. LightOJ 1074 - Extended Traffic (SPFA)

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

  9. LightOJ 1074 - Extended Traffic 【SPFA】(经典)

    <题目链接> 题目大意:有n个城市,每一个城市有一个拥挤度Ai,从一个城市I到另一个城市J的时间为:(A(v)-A(u))^3.问从第一个城市到达第k个城市所花的时间,如果不能到达,或者时 ...

随机推荐

  1. Elasticsearch在windows上安装好了之后怎么使用?

    windows 10上安装Elasticsearch过程记录 一.安装和配置Java JDK1.下载:http://download.oracle.com/otn ... 4.exe2.设置环境变量: ...

  2. 【BZOJ3667】Rabin-Miller算法(Pollard_rho)

    [BZOJ3667]Rabin-Miller算法(Pollard_rho) 题面 呜,权限题,别问我是怎么做的(我肯定没有权限号啊) 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...

  3. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  4. 电子商务(电销)平台中商品模块(Product)数据库设计明细

    以下是自己在电子商务系统设计中的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 商品表 (product)|-- 自动编号 (product_id)|-- 商品名称 (produc ...

  5. array_diff、array_diff_key、array_diff_ukey、array_diff_assoc、array_diff_uassoc 的用法

    <?php // array_diff* 系列的函数都返回关联数组// array_diff* 系列函数返回数组的差集(返回在第一个参数中, 但不在其他参数中的元素) $array1 = [ ' ...

  6. 1.5 Scipy:高级科学计算

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  7. Tensorboard教程:Tensorflow命名空间与计算图可视化

    Tensorflow命名空间与计算图可视化 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 强烈推荐Tensorflow实战Google深度学习框架 实验平台: Tensorflow ...

  8. centos7下安装配置jenkins+git+maven+jdk

    环境 centos7 jdk1.8 maven3 git 在安装jenkins之前,先安装jdk1.8.maven.git 一. 安装jdk1.8 第一步:下载 jdk-8u131-linux-x64 ...

  9. Linux 下 JDK + Eclipse + PyDev 安装与配置

    一:JDK / JRE 环境 Eclipse 是运行于Java虚拟机中的,所以必须先安装Java环境才能进行开发测试.JRE(Java Runtime Environment)是运行环境,JDK(Ja ...

  10. VS Code 配置 C/C++ 环境

    写作原因 微软的 VSCode 一直以来为人诟病的一个问题就是对于 C/C++ 工程的编译以及调试支持度有限,配置起来比较复杂,但是 vscode-cpptools 团队经过一段时间的 bug 修复之 ...