LightOJ 1074 O - Extended Traffic(SPFA判断负环)
2016-01-19 23:27
363 查看
题目链接:kuangbin带你飞 专题四 最短路练习 O - Extended Traffic
题意
给定每条街的拥挤度p(x),街a到街b的时间就是(p(b)-p(a))**3,求第一个点到第k个点的最短路,若无法到达或结果小于3,输出’?’。思路
显然,题目可能存在负环,则所有负环上的点全应该输出’?’ ,因为它们必定小于3,所以,spfa判断负环,并进行标记,即可解决代码
[code]#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> #include<stack> #include<queue> using namespace std; const int N = 209; const int MAX = 0x3f3f3f3f; int dis ; int p ; int h ; int cnt ; bool vis ; bool r ; int c ; struct Node { int u, v, w, next; }e[N*N]; void dfs(int x) { r[x] = 1; for(int i=h[x]; i!=-1; i=e[i].next) if(!r[e[i].v]) dfs(e[i].v); } void spfa(int n, int Q) { memset(cnt, 0, sizeof(cnt)); memset(vis, 0, sizeof(vis)); memset(r, 0, sizeof(r)); memset(dis, 0x3f3f3f3f, sizeof(dis)); queue<int> q; q.push(1); dis[1] = 0; while(!q.empty()) { int x = q.front(); vis[x] = 0; q.pop(); for(int i=h[x]; i!=-1; i=e[i].next) { int v = e[i].v; if(r[v]) continue; if(dis[v] > dis[x] + e[i].w) { dis[v] = dis[x] + e[i].w; if(!vis[v]) { vis[v] = 1; q.push(v); if(++cnt[v] >= n) dfs(v); } } } } for(int i=0; i<Q; i++) { int to = c[i]; if(dis[to]==MAX || r[to] || dis[to] < 3) printf("?\n"); else printf("%d\n", dis[to]); } } int main() { int T; scanf("%d", &T); for(int tt=1; tt<=T; tt++) { int n, m; scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d", &p[i]); scanf("%d", &m); memset(h, -1, sizeof(h)); for(int i=0; i<m; i++) { int a, b; scanf("%d%d", &a, &b); e[i].u = a; e[i].v = b; e[i].w = (p[b]-p[a])*(p[b]-p[a])*(p[b]-p[a]); e[i].next = h[a]; h[a] = i; } int Q; scanf("%d", &Q); for(int i=0; i<Q; i++) scanf("%d", &c[i]); printf("Case %d:\n", tt); spfa(n, Q); } return 0; }
相关文章推荐
- 幂律分布与自组织过程
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
- 【JavaWeb Structs2学习】 访问request,session,application
- Linux编程简介——静态链接库和动态链接库
- Gradle version 2.10 is required. Current version is 2.8
- 9. Palindrome Number
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
- 在linux中安装nginx
- 初步了解UBOOT (4)
- jenkins 入门教程(中)
- Linux账号密码过期会导致crontab作业不能执行
- Java Swing JTextArea,JScrollPane——实现数据的刷新到最底行
- 隐藏在手机中的好玩代码
- iOS学习之数据持久化详解
- Android开发学习:ImageView的scaletype属性
- Android Studio——HttpClient
- JAVA源码学习-LinkedList
- 使用Java的JNative调用dll动态链接库
- 23333 又是一篇水文章(以下是各种复制来的关于maven转成eclipse项目)
- 2015年11月26日 Java基础系列(六)正则表达式Regex