Codeforces 459E Pashmak and Graph(dp+贪心)
2014-08-16 10:57
369 查看
题目链接:Codeforces 459E Pashmak and Graph
题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径。
解题思路:将边按照权值排序,每次将相同权值的边同时加入,维护每个点作为终止点的最大长度即可。
题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径。
解题思路:将边按照权值排序,每次将相同权值的边同时加入,维护每个点作为终止点的最大长度即可。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 3 * 1e5+5; struct edge { int u, v, w; }s[maxn]; bool cmp (const edge& a, const edge& b) { return a.w < b.w; } int n, m, d[maxn], f[maxn], val[maxn]; int main () { scanf("%d%d", &n, &m); memset(d, 0, sizeof(d)); memset(f, 0, sizeof(f)); memset(val, 0, sizeof(val)); for (int i = 0; i < m; i++) scanf("%d%d%d", &s[i].u, &s[i].v, &s[i].w); sort(s, s + m, cmp); for (int i = 0; i < m; i++) { int j; for (j = i; s[j].w == s[i].w && j < m; j++); for (int k = i; k < j; k++) d[s[k].v] = max(d[s[k].v], f[s[k].u] + 1); for (int k = i; k < j; k++) f[s[k].v] = d[s[k].v]; i = j - 1; } int ans = 0; for (int i = 1; i <= n; i++) ans = max(ans, f[i]); printf("%d\n", ans); return 0; }
相关文章推荐
- Codeforces 645E Intellectual Inquiry (贪心+DP)
- codeforces 571B--Minimization(贪心+dp)
- CodeForces 337C Captains Mode(dp+位运算+贪心)
- Codeforces 5C Longest Regular Bracket Sequence [贪心] [DP]
- codeforces 269B Greenhouse Effect (贪心+dp)
- Codeforces 545 C Woodcutters(贪心/DP)
- codeforces 229 D Towers 贪心+DP
- codeforces 913 c Party Lemonade(贪心+DP)
- CodeForces 645 E.Intellectual Inquiry(dp+贪心)
- [Codeforces 940.E] Cashback(dp,数据结构,贪心)
- Codeforces 320E Kalila and Dimna in the Logging Industry【思维+贪心+斜率优化Dp】好题!
- Codeforces 645E Intellectual Inquiry [贪心] [DP]
- Codeforces 77C 树形dp + 贪心
- Codeforces 365D 贪心+dp
- 【CodeForces 5C】【贪心】【dp】Longest Regular Bracket Sequence
- codeforces 527D D. Clique Problem(二分+线段树+贪心+dp)
- [Codeforces 814D] An overnight dance in discotheque 树形dp,贪心
- codeforces-486【C-贪心-思维】【D-树状DP】
- CodeForces 588A. Duff and Meat 【贪心 dp】
- Codeforces 618 D Hamiltonian Spanning Tree 贪心+dp