计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题Skiing(拓扑序求DAG最长路)
2017-09-09 19:50
645 查看
题意:
给定一个有向无环图,求该图的最长路。
思路:
由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可。
代码:
继续加油~
给定一个有向无环图,求该图的最长路。
思路:
由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可。
代码:
#include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 1e4+5; const int maxm = 1e5+5; struct node{int v, w, next;} edge[maxm]; int no, head[maxn]; int t, n, m; int deg[maxn], val[maxn]; queue<int> q; void init() { no = 0; memset(head, -1, sizeof head); memset(deg, 0, sizeof deg); memset(val, 0, sizeof val); } inline void add(int u, int v, int w) { edge[no].v = v; edge[no].w = w; edge[no].next = head[u]; head[u] = no++; } void topsort() { while(!q.empty()) q.pop(); for(int i = 1; i <= n; ++i) if(!deg[i]) q.push(i); int ans = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(int k = head[u]; k+1; k = edge[k].next) { int v = edge[k].v; val[v] = max(val[v], edge[k].w+val[u]); if(--deg[v] == 0) q.push(v); } } printf("%d\n", *max_element(val+1, val+n+1)); } int main() { for(scanf("%d", &t); t--;) { scanf("%d %d", &n, &m); init(); for(int i = 1; i <= m; ++i) { int u, v, w; scanf("%d %d %d", &u, &v, &w); add(u, v, w); ++deg[v]; } topsort(); } return 0; }
继续加油~
相关文章推荐
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区) 网络赛 H.Skiing(求有向无环图的最长路)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛G题Query on a strin(树状数组+暴力更新)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛J题Our Journey of Dalian Ends (最小费用最大流)
- 计蒜客 16957 Skiing(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-H-Skiing
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-J-Our Journey of Dalian Ends
- [计蒜客16955] Islands [2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F]
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Query on a string(字符串+树状数组)
- 计蒜客 16950 Banana(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A)
- 计蒜客 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B coin(求乘法逆元)
- 重要-- 模板 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛J题Our Journey of Dalian Ends (最小费用最大流)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-H Skiing
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-总结及部分代码
- 计蒜客 16952 Coconut(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 C)
- 计蒜客 16954 Half-consecutive Numbers(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-A-Banana
- Skiing( 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 )
- 计蒜客 16955 Islands(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F)
- 计蒜客:2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛:Our Journey of Dalian Ends