码迷,mamicode.com
首页 > 其他好文 > 详细

CF261(D2)E DP

时间:2014-08-19 23:46:55      阅读:719      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   数据   for   cti   

【题意】:

给出n,m,代表n个点、及m条有向边。然后m行给出每条有向边的u,v,w(权值)。

题目要求你求出最长路径的长度,是该路径满足权值严格递增。

数据范围 1 ≤ wi ≤ 10^5

【知识点】:

DP

【题解】:

一道看似图论的题目,其实可以利用递推的方法巧妙地解决。

因为权值的最大值为10^5,所以可以用权值表示下标,来保存边

然后遍历权值

tmp[v]表示在当前权值所在边为尾边的最大长度,用max(tmp[v], dp[u] + 1)更新

然后用tmp[v]更新dp[v],dp[v]代表末端为v的最大长度

最后从1到n遍历dp 取最大值即为其答案

【代码】:

 1 #include <map>
 2 #include <set>
 3 #include <cmath>
 4 #include <ctime>
 5 #include <queue>
 6 #include <stack>
 7 #include <cstdio>
 8 #include <string>
 9 #include <vector>
10 #include <cstring>
11 #include <sstream>
12 #include <iostream>
13 #include <algorithm>
14 #include <bitset>
15 #include <climits>
16 using namespace std;
17 
18 #define wh while
19 #define inf (int)(~0u/2)
20 #define FOR(i, n) for(int i = 0; i < n; i++)
21 #define FOR1(i, n) for(int i = 1; i < n; i++)
22 #define FOR2(i, n) for(int i = 0; i <= n; i++)
23 #define REP(i,n) for(int i = 1; i <= n; i++)
24 #define FORI(it,n) for(typeof(n.begin()) it = n.begin(); it != n.end(); it++)
25 #define sf scanf
26 #define pf printf
27 #define frs first
28 #define sec second
29 #define psh push_back
30 #define mkp make_pair
31 #define PB(x) push_back(x)
32 #define MP(x, y) make_pair(x, y)
33 #define clr(abc,z) memset(abc,z,sizeof(abc))
34 #define lt(v) v << 1
35 #define rt(v) v << 1 | 1
36 //#define mid ((l + r) >> 1)
37 #define lson l, mid, v << 1
38 #define rson mid + 1, r, v << 1 | 1
39 
40 #define fre freopen("1.txt", "r", stdin)
41 
42 typedef long long LL;
43 typedef long double LD;
44 
45 const int maxn = 3e5 + 100;
46 vector<pair<int, int> > w[maxn];
47 int dp[maxn], tmp[maxn];
48 
49 int main(){
50     int n, m;
51     sf("%d%d", &n, &m);
52     FOR(i, m){
53         int u, v, len; sf("%d%d%d", &u, &v, &len);
54         w[len].PB(MP(u, v));
55     }
56     FOR(i, maxn){
57         int clen = w[i].size(), u, v;
58         FOR(j, clen){
59             v = w[i][j].second;
60             tmp[v] = 0;
61         }
62         FOR(j, clen){
63             u = w[i][j].first; v = w[i][j].second;
64             tmp[v] = max(tmp[v], dp[u] + 1);
65         }
66         FOR(j, clen){
67             u = w[i][j].first; v = w[i][j].second;
68             dp[v] = max(dp[v], tmp[v]);
69         }
70     }
71     int ans = 0;
72     REP(i, n)
73         ans = max(ans, dp[i]);
74     pf("%d", ans);
75 }

 

CF261(D2)E DP,布布扣,bubuko.com

CF261(D2)E DP

标签:style   blog   color   os   io   数据   for   cti   

原文地址:http://www.cnblogs.com/Ntcrush/p/3923464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!