Extended Traffic LightOJ - 1074
题目链接: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的更多相关文章
- Extended Traffic LightOJ - 1074 spfa判断负环
//判断负环 在负环内的城市输出? #include <iostream> #include <queue> #include <cstdio> #include ...
- Extended Traffic LightOJ - 1074 (经典SPFA问题)
题目大意:每一个城市都有一定的繁荣度,然后给出m条有向边i->j,定义这条边的权值为pow(arr[j]-arr[i],3),然后给你q个询问,每个询问输入一个x. 然后问你点1到x的距离,如果 ...
- 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 ...
- Light OJ 1074:Extended Traffic(spfa判负环)
Extended Traffic 题目链接:https://vjudge.net/problem/LightOJ-1074 Description: Dhaka city is getting cro ...
- lightoj 1074 spfa判断负环
Extended Traffic Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Sub ...
- LightOj 1074 Extended Traffic (spfa+负权环)
题目链接: http://lightoj.com/volume_showproblem.php?problem=1074 题目大意: 有一个大城市有n个十字交叉口,有m条路,城市十分拥挤,因此每一个路 ...
- 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的约束条件不够,那么在得知有负环时,把这个环的点都标记下 ...
随机推荐
- set去重应用
1.其中涉及__hash__与__eq__这两个内置方法. 2.列如: 要求用类生成多个对象,其中姓名和性别相同的对象可认为是同一个人,用set原理做去重 class People: def __in ...
- Codeforces Round 584 题解
-- A,B 先秒切,C 是个毒瘤细节题,浪费了很多时间后终于过了. D 本来是个 sb 题,然而还是想了很久,不过幸好没什么大事. E1,看了一会就会了,然而被细节坑死,好久才过. 感觉 E2 很可 ...
- Linux性能优化实战学习笔记:第三十一讲
一.上节回顾 上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路. 虽然 I/O 的性能指标很多,相应的性能 ...
- [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 遍历 combobox 中的各个选项
For ii = 0 To cboTCAT.Items.Count - 1 MessageBox.Show(CType(cboTCAT.DataSource, DataTable).Rows(ii). ...
- 2018-2019-2 20162329 《网络对抗技术》Exp7: 网络欺诈防范
目录 Exp7: 网络欺诈防范 一. 基础问题回答 1. 通常在什么场景下容易受到DNS spoof攻击 二. 实验过程 1. 简单应用SET工具建立冒名网站 2. ettercap DNS spoo ...
- Python3.7 exe编译工具对比zz
For years, NVDA has used Py2exe to package Python code into something that is executable on a system ...
- express常见获取参数的方法
1.req.query 处理get请求 // GET /search?q=tobi+ferret req.query.q // => "tobi ferret" // GET ...
- Java for循环每次都通过list.size()和 string.length()获取大小是否消耗性能?
前言 有人说在for循环之前用一个局部变量先获取到list.size().str.length(),然后在for循环的判断条件里通过这个局部变量替换list.size().str.length()会节 ...
- WPF XAML Trigger中使用动画后 动画对象冻结的处理办法
在编写XAML时 在Trigger中使用动画,在动画之后,动画对象就会被冻结,无法被其他动画或者属性改变. 处理办法有: 1 使用附加属性来添加动画 public static readonly De ...