LightOJ - 1074 Extended Traffic (SPFA+负环)
题意:N个点,分别有属于自己的N个busyness(简称b),两点间若有边,则边权为(ub-vb)^3。Q个查询,问从点1到该点的距离为多少。
分析:既然是差的三次方,那么可能有负边权的存在,自然有可能出现负环。第一次用Dijkstra做,没多想,样例过了就去交了,结果肯定是WA了。之后加入了对负环的判断。很明显,如果在SPFA的算法过程中,若点u进出队列的次数达到N(N次松弛操作),那么u肯定在负环中。此外,u的邻接点v的距离dist[v]也必然<3,因为dsit[u]可以取到一个极小值。通过dfs函数给这些邻接点也加上标记。最后查询时,若点v不可到达,距离小于3或被标记,都是不合法的情况。
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<vector>
#include<string>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
typedef int LL;
const int MAXN = ;
const int MAXM = MAXN * MAXN;
const int INF = 0x3f3f3f3f;
queue<int>q;
int N,M;
struct Edge{
int v,next;
int w;
}; struct Spfa
{
int N,M;
bool inq[MAXN];
int dp[MAXN],cnt[MAXN];
int pre[MAXN];
int head[MAXN],tot;
int dis[MAXN];
bool incir[MAXN];
Edge edge[MAXM]; void init(int n){
N = n;
tot = ;
memset(head,-,sizeof(head));
memset(cnt,,sizeof(cnt));
} void Addedge(int u,int v,int w){
edge[tot].v = v;
edge[tot].w = w;
edge[tot].next = head[u];
head[u] = tot++;
} void dfs(int pos){
incir[pos] = true;
for (int i = head[pos] ; i != - ; i = edge[i].next){
int v = edge[i].v;
if (!incir[v])
dfs(v);
}
} void spfa(int s){
memset(incir,false,sizeof(incir));
memset(inq,false,sizeof(inq));
for (int i = ; i <= N ; i++) dis[i] = INF;
while (!q.empty()) q.pop();
q.push(s);
dis[s] = ;
cnt[s] = ;
inq[s] = true;
while (!q.empty()){
int u = q.front(); q.pop();
inq[u] = false;
for (int i = head[u] ; i != - ; i = edge[i].next){
int v = edge[i].v;
if (incir[v]) continue;
if (dis[v] > dis[u] + edge[i].w){
dis[v] = dis[u] + edge[i].w;
if (!inq[v]){
inq[v] = true;
cnt[v]++;
q.push(v);
if (cnt[v] >= N) dfs(v);
}
}
}
}
}
}G; LL dist(LL a,LL b){
LL t = b-a;
return t*t*t;
} LL p[MAXN]; #define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int N,M,S,T,u,v,q,cas=;
LL tmp,b;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
G.init(N);
for(int i=;i<=N;++i){
scanf("%d",&p[i]);
}
scanf("%d",&M);
for(int i=;i<=M;++i){
scanf("%d%d",&u,&v);
G.Addedge(u,v,dist(p[u],p[v]));
}
G.spfa();
scanf("%d",&q);
printf("Case %d:\n",cas++);
for(int i=;i<=q;++i){
scanf("%d",&v);
if(G.dis[v]==INF || G.dis[v]<|| G.incir[v] ) printf("?\n");
else printf("%d\n",G.dis[v]);
}
}
return ;
}
LightOJ - 1074 Extended Traffic (SPFA+负环)的更多相关文章
- LightOj 1074 Extended Traffic (spfa+负权环)
题目链接: http://lightoj.com/volume_showproblem.php?problem=1074 题目大意: 有一个大城市有n个十字交叉口,有m条路,城市十分拥挤,因此每一个路 ...
- LightOJ 1074 Extended Traffic SPFA 消负环
分析:一看就是求最短路,然后用dij,果断错了一发,发现是3次方,有可能会出现负环 然后用spfa判负环,然后标记负环所有可达的点,被标记的点答案都是“?” #include<cstdio> ...
- LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)
题目链接:https://cn.vjudge.net/contest/189021#problem/O 题目大意:有n个站点,每个站点都有一个busyness,从站点A到站点B的花费为(busynes ...
- LightOJ 1074 - Extended Traffic (SPFA)
http://lightoj.com/volume_showproblem.php?problem=1074 1074 - Extended Traffic PDF (English) Stati ...
- LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)
Extended Traffic 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/O Description Dhaka city ...
- lightoj 1074 - Extended Traffic(spfa+负环判断)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1074 题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J ...
- SPFA(负环) LightOJ 1074 Extended Traffic
题目传送门 题意:收过路费.如果最后的收费小于3或不能达到,输出'?'.否则输出到n点最小的过路费 分析:关键权值可为负,如果碰到负环是,小于3的约束条件不够,那么在得知有负环时,把这个环的点都标记下 ...
- (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...
- LightOJ - 1074 Extended Traffic(标记负环)
题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市u到另一个城市v的时间为:(au-av)^3,存在负环.问从第一个城市到达第k个城市所话的时间,如果不能到达,或者时间小于3输出?否则输出所花的 ...
随机推荐
- iOS开发之--改变系统导航的颜色,字体,还有返回样式的自定义
在写项目的工程中,我们可能会遇到各种各样的项目,写的方法也是各有不同,不喜欢自定义的小伙伴也很多, 下面我就记录下系统导航和barbuttonitem的修改系统空间的方法: 1,添加rightbarb ...
- centos7 docker install
env: os :centos 7 vmware steps: 1.yum -y install docker after installed ,using docker version cmd ...
- __construct __destory __call __get __set
1,__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. 我们知道 php5对象模型 < ,所以__construct()作为类的默认的构造函数 而不会调用同类名函 ...
- 一个网络设备的常见功能--连通性检查SSRF漏洞--被黑客利用当做扫描器
一.我们先来看一下很多网络设备都有的一个常见功能--连通性测试: 很多网络设备都具备与其他设备通信,联动的功能,例如网络设备联动安全设备,网络设备联动认证设备等等.此时都需要一个对端IP和对端端口号作 ...
- ehcache 的 配置文件: ehcache.xml的认识
<ehcache> <!-- 指定一个目录:当 EHCache 把数据写到硬盘上时, 将把数据写到这个目录下. --> <diskStore path="d:\ ...
- 使用JavaMail发送邮件,465端口开启ssl加密传输
package com.wangxin.test; import java.security.Security; import java.util.Date; import java.util.Pro ...
- Webpack4.x 入门
概览 新建项目 npm init -y 安装webpack & webpack-cli (c)npm install -D webpack (c)npm install -D webpack- ...
- 全球数字货币交易所TOP20安全性评级报告
链塔智库2018-05-03 10:28 分析师:常昊.王婧雯 来源: 链塔智库 全球加密数字货币市值超2.5万亿元,单日交易额超2000亿元,全球超过3000万人已投入加密数字货币领域. ...
- Mysql日常操作
创建用户并授权 grant all privileges on test.* to "test"@"localhost" identified by " ...
- mysql表的完整性约束
概览 为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测, 使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效 ...