LightOJ
来源:互联网 发布:z3735 ubuntu 编辑:程序博客网 时间:2024/06/07 02:40
这题判负环后需要用dfs把整个负环标记一下,WA到爆炸的同学尝试把I64改成ll或者直接用int
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 250;bool vis[maxn], judge[maxn];int T, N, M, Q, busyness[maxn], tot, head[maxn], num[maxn], dis[maxn];struct Edge { int to, val, next;}edge[maxn * maxn];int cal(int x, int y) { return (x - y) * (x - y) * (x - y); }void init() { tot = 0; for (int i = 1; i <= N; i++) head[i] = -1, judge[i] = false;}void addedge(int u, int v, int val) { tot++; edge[tot].to = v; edge[tot].val = val; edge[tot].next = head[u]; head[u] = tot;}void dfs(int u) { if (judge[u]) return; judge[u] = true; for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to; dfs(v); }}void spfa(int s) { for (int i = 1; i <= N; i++) dis[i] = INF, vis[i] = false, num[i] = 0; dis[s] = 0, vis[s] = true, num[s] = 1; queue<int> q; q.push(s); while (!q.empty()) { int u = q.front(); q.pop(); vis[u] = false; for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to, val = edge[i].val; if (dis[v] > dis[u] + val) { dis[v] = dis[u] + val; if(!vis[v]) { vis[v] = true; num[v]++; q.push(v); if (num[v] >= N) { dfs(v); return; } } } } }}int main() { scanf("%d", &T); for (int kase = 1; kase <= T; kase++) { scanf("%d", &N); init(); for (int i = 1; i <= N; i++) scanf("%d", &busyness[i]); scanf("%d", &M); for (int i = 1; i <= M; i++) { int u, v; scanf("%d %d", &u, &v); int val =cal(busyness[v], busyness[u]); addedge(u, v, val); } spfa(1); printf("Case %d:\n", kase); scanf("%d", &Q); for (int i = 1; i <= Q; i++) { int temp; scanf("%d", &temp); if (judge[temp] || dis[temp] == INF || dis[temp] < 3) { printf("?\n"); } else { printf("%d\n", dis[temp]); } } } return 0;}
阅读全文
1 0
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- [LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- leetcode 475. Heaters
- CSS3图片水平居中常用方法
- Ajax缓存原理
- leetcode 540. Single Element in a Sorted Array
- NSRunLoop 概述和原理
- LightOJ
- 用python3.5逛今日头条
- 【机器学习实战】第10章 K-Means(均值)聚类算法
- Bmob导入DEMO的各种辛酸史(下)
- linux 怎么把^M去掉
- 多线程/并发笔记:Java并发编程之this逃逸问题
- Android Parcelable的使用
- 从本地安装Eclipse插件详解
- 2017智慧树人类与生态文明答案单元测试答案