CF459E Pashmak and Graph && nyoj1208 水题系列 【贪心+dp】
2014-08-20 17:52
465 查看
题目:CF459E Pashmak and Graph
题意:给出n个点,m条边的图,然后让你每次只能向权值更大边走,求最大的边数。可以走多次
分析:由于点比较多,我们可以先对权值从小到大排序,然后从小的开始,更新它的到的节点的值为前一个节点值+1,但是还会出现权值相等成环的情况,所以我们可以对相等的进行延迟更新。
代码:
题意:给出n个点,m条边的图,然后让你每次只能向权值更大边走,求最大的边数。可以走多次
分析:由于点比较多,我们可以先对权值从小到大排序,然后从小的开始,更新它的到的节点的值为前一个节点值+1,但是还会出现权值相等成环的情况,所以我们可以对相等的进行延迟更新。
代码:
#include<cstdio> #include<algorithm> #include <cstring> using namespace std; const int N = 305000; int dp ,g ; ///dp保存到当前位置的最大值 g保存到当前点的最大值 struct edge { int u,v,w; bool operator <(const edge& obj) const { return w<obj.w; } } e[300010]; int main() {int n,m; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); memset(g,0,sizeof(g)); for(int i=0; i<m; i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); sort(e,e+m); int t=0,ans=0; for(int i=0; i<m; i++) { dp[i]=g[e[i].u]+1; //当前位置全部更新 if(e[i].w!=e[i+1].w) //当前点只更新不相等的 { for(int j=t; j<=i; j++) g[e[j].v]=max(g[e[j].v],dp[j]); t=i+1; ///t数组延迟更新相等的 } ans=max(ans,dp[i]); } printf("%d\n",ans); } return 0; }
相关文章推荐
- nyoj 1208——水题系列——————【dp】
- NYOJ1208 水题系列(DP)
- nyoj 49 开心的小明 【dp&&贪心】
- nyoj 610 定长覆盖 && 贪心问题系列
- NYOJ 79 & 17 & 214 单调最长子序列问题(DP)
- ZOJ 1093 && NYoj16(DP)
- 数据结构 动态规划DP (POJ 1088 && NYOJ 10)
- HDU 4504 威威猫系列故事――篮球梦 母函数&DP
- hdu 1009 FatMouse' Trade(贪心水题)
- hdu 1208 Pascal's Travels (子状态继承dp)
- NYOJ435 & SGU131 - 棋盘覆盖二 (状压DP+插头DP)
- poj 1185 && NYOJ 85 炮兵阵地(状态压缩dp)
- NYOJ 30 && POJ 1042 Gone Fishing(枚举+贪心)
- NYOJ 79 & 17 & 214 单调最长子序列问题(DP)
- 推桌子nyoj 220&&hdu1050 (贪心算法系列)
- POJ 3111 K Best &&NYOJ 914 (二分+ 贪心,最大化平均值)
- CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树
- NYOJ - skiing(搜索&dp)
- nyoj 106 背包问题 (dp或贪心都可)
- NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)