H: Skiing
来源:互联网 发布:项城市乡镇人口数据 编辑:程序博客网 时间:2024/03/29 08:02
H: Skiing
很显然是拓扑,用拓扑序做一次最长路就好了
#include <bits/stdc++.h>#include <vector>using namespace std;const int maxn = 10010;int q[maxn], f[maxn], a[maxn], n, m, l, r, ans, x, y, z;struct Node { int v, l; Node() {} Node(int vv, int ll): v(vv), l(ll) {}};vector<Node> G[maxn];void init() { l = r = 0; scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) G[i].clear(); memset(f, 0, sizeof(f)); memset(a, 0, sizeof(a)); memset(q, 0, sizeof(q)); for (int i = 1; i <= m; i++) { scanf("%d %d %d", &x, &y, &z); a[y]++; G[x].push_back(Node(y, z)); } for (int i = 1; i <= n; i++) if (a[i] == 0) { q[++r] = i; } ans = 0;}void work() { while (l != r) { l++; int u = q[l]; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i].v; int l = G[u][i].l; f[v] = max(f[v], f[u]+l); ans = max(ans, f[v]); a[v]--; if (!a[v]) q[++r] = v; } }}int main() { freopen("input.txt","r",stdin); int T; scanf("%d", &T); while (T--) { init(); work(); printf("%d\n", ans); }}
阅读全文
0 0
- H: Skiing
- Skiing
- skiing
- skiing
- skiing
- Skiing
- Skiing
- Skiing
- skiing
- skiing
- skiing
- skiing
- skiing
- skiing
- Skiing
- skiing
- 2017 icpc 乌鲁木齐赛区 H.Skiing(拓扑排序+DP)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing(记忆化dfs)
- hdu 1513 Palindrome (滚动数组处理回文串)
- K
- EDA与VHDL作业(1)
- Hibernate 级联操作cascade及inverse
- 如何在安卓上显示复杂动画
- H: Skiing
- 前端面试经
- Hibernate 基于List集合映射
- 浅析Javascript匿名函数与自执行函数
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-H Skiing
- spring02依赖注入DI
- 字符串碎片问题,例如“aaabbaaac”是由下面碎片组成“aaa”,"bb","c",则计算所有碎片的平均长度
- web.xml
- Hibernate 基于map集合映射