Extended Traffic

LightOJ-1074

  • 这题因为涉及到减法和三次方,所以可能会出现负圈。
  • 这里使用的算法叫做SPFA算法,这个可以用来判负圈和求解最短路。Bellman-Ford算法和SPFA算法很相似。
  • 这里要注意的是cnt出现次数应该要在哪里加。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=202;
int d[maxn];
int n,m;
int a[maxn];
int cnt[maxn];
bool vis[maxn];
bool circle[maxn];
struct edge{
int to;
int cost;
};
vector<edge>edges[maxn];
void SPFA(int s){
memset(d,INF,sizeof(d));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
memset(circle,0,sizeof(circle));
d[s]=0;
queue<int> q;
q.push(s);
vis[s]=1;
while(!q.empty()){
int v=q.front();
q.pop();
vis[v]=0;
for(int i=0;i<edges[v].size();i++){
int u=edges[v][i].to;
int cost=edges[v][i].cost;
if(circle[u])
continue;
if(d[u]>d[v]+cost){
d[u]=d[v]+cost;
if(!vis[u]){
q.push(u);
vis[u]=1;
cnt[u]++;
}
if(cnt[u]>n)
circle[u]=1;
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
int k=0;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
edges[i].clear();
}
cin>>m;
for(int i=0;i<m;i++){
int from,to;
cin>>from>>to;
int diff=(a[to]-a[from])*(a[to]-a[from])*(a[to]-a[from]);
edges[from].push_back({to,diff});
}
SPFA(1);
int q;
cin>>q;
cout<<"Case "<<++k<<":"<<endl;
for(int i=0;i<q;i++){
int ter;
cin>>ter;
if(d[ter]<3||d[ter]==INF||circle[ter]){
cout<<"?"<<endl;
}else cout<<d[ter]<<endl;
}
}
return 0;
}

最新文章

  1. Linux下安装libiconv使php支持iconv函数
  2. iOS动画中的枚举UIViewAnimationOptions
  3. 批处理bat命令--获取当前盘符和当前目录和上级目录
  4. C# 图结构操作
  5. 矩阵求逆c++达到
  6. 远程数据client交换器
  7. Cmake新手使用日记(1)【C++11下的初体验】
  8. bind9的一些配置
  9. python编码问题和逻辑运算
  10. 汉诺塔I &amp;&amp; II
  11. No Spring WebApplicationInitializer types detected on classpath 问题的一种解决办法
  12. 浅谈CLR CTS CLS。。。
  13. Django在根据models生成数据库表时报错: __init__() missing 1 required positional argument: &#39;on_delete&#39;
  14. Windows 下面 redis 发布为服务的官方方法
  15. linux就该这么学,第十天了
  16. hdu2476
  17. P4879 ycz的妹子
  18. 51Nod:1085 背包问题
  19. Scala 中的foreach和map方法比较
  20. 字符串 - KMP模式匹配

热门文章

  1. 【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}
  2. HDU 6880 Permutation Counting dp
  3. CodeForces - 449B 最短路(迪杰斯特拉+堆优化)判断最短路路径数
  4. hdu2639 Bone Collector II
  5. 自己动手实现springboot运行时执行java源码(运行时编译、加载、注册bean、调用)
  6. CentOS 7 架设LNMP动态网站
  7. Shell 函数 &amp; 数组
  8. P类问题,NP,NPC,HPHard,coNP,NPI问题 的简单认识
  9. map最最最基本用法
  10. five86-1 (OpenNetadmin RCE+cp命令提权+crunch生成密码字典)