题目链接: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. MSSQL DBA权限获取WEBSHELL的过程

    前言 本文主要通过一个案例来演示一下当MSSQL是DBA权限,且不知道路径的时候如何去获取WEBSHELL.当然这种方式对站库分离的无效.我测试的环境是在Win7 64位下,数据库是SQLServer ...

  2. 70路小报:用PV和UV作为网站衡量指标已经过时

    方法]投资人呼吁:PV和UV不应该再作为产品衡量指标 风险投资机构Andreessen Horowitz近日一直反对再用传统的网站衡量指标去评价互联网产品,比如PV和UV,甚至包括应用的下载量. 他们 ...

  3. 洛谷P1943 LocalMaxima_NOI导刊2009提高(1)(分段打表)

    显然只需要算出每个数比前面所有数大的期望然后全部加起来就好了,一个数的期望怎么算呢? 对于一个数我们需要考虑比它大的数,因为比它小的数放它前面放它后面都可以,但是比它大的数只能放它后面.考虑大于等于它 ...

  4. mysql数据库----视图、触发器、存储过程、函数、事务、索引、其他语句

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...

  5. Hibernate持久化对象修改id重新保存的办法

    Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二 2017年11月10日 20:16:48 筱光 阅读数:1122   版权声明:本文为博主原创文章,未经博主允许不得 ...

  6. Codeforces243A The Brand New Function

    A. The Brand New Function time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  7. redis 配置和使用(C++)

    一.Redis简介: Redis为非关系型数据库,Redis是一个Key-Value存储系统.它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(s ...

  8. 手脱JDPack

    1.PEID查壳 JDPack 2.载入OD,入口是一个pushad入栈,可以使用ESP,下硬件访问断点,shift+F9 0040E000 > pushad ; //入口 0040E001 E ...

  9. 堡垒机初识--paramiko模块

    一.paramiko模块 Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作. 1.1 在windows上安装paramiko模块 测试环境: win10 , python ...

  10. 「Linux」centos7安装使用rar

    安装 1 wget https://www.rarlab.com/rar/rarlinux-x64-5.5.0.tar.gz 2 tar -xzvf rarlinux-x64-5.5.0.tar.gz ...