$SCOJ4427 Miss Zhao's Graph$
\(problem\)
给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增。
图中可能有重边和自环。
\(题意非常简单:n个点 m个带权边 最多能连成多少条边\)
\(看起来像搜索 就拿搜索水了一波\)
\(然后吧评测都卡爆了(而且只有9pts)\)
总是觉得好亏
\(打了一只前向星+DFS瞎搜\)(大雾)
\(~~恶心的DP题~~\)
\(9pts -> 0pts -> 64pts -> 73pts - >91pts ->100pts\)
数据范围很大 显然\(O(N)\) \(or\) $O(M) $
这题用搜索可以达到 \(O(N*玄学)\) 玄学 = 一次搜索时间 >\(如果带上记忆化 应该快点\)
\(那么DP的解法是O(M)的 每条边跑一次 记录一次\)
重点 ->“递增”
首先 要按权值给边排序
\(所以 应该注重权值相同的边\)
\(if(i < m and edge[i].dis == edge[i+1].dis) continue ;\)
\(加不加等于都没有关系 因为初始值是0\)
\(权值相同就直接跳过 否则会Wrong Answer\)
\(这是特判权值相同的边\)
cnt数组用来储存边权相同的情况
这句\(cnt[edge[k].to] = max ( cnt[edge[k].to] , dp[edge[k].from] + 1 ) ;\) 不要手欠把dp和cnt打错 否则喜提WA数量不等(滑稽
还有一句话 \(十年OI一场空 不开LL见祖宗orz\)
实测int WA了一个点
\(code\)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() { LL res(0),f(1); register char c = getchar() ;
while(!isdigit(c)) { if(c == '-') f = -1 ; c = getchar() ; }
while(isdigit(c)) res = (res << 1) + (res << 3) + (c & 15) , c = getchar() ; return res * f ;
}
int n , m ;
const int N = 300000 ;
struct node{
int from ;
int to ;
int dis ;
}edge[N] ;
LL cnt[N] ;
LL dp[N] ;
bool cmp(node x,node y) { return x.dis < y.dis ; }
signed main() {
memset(edge,0,sizeof(edge)) ; memset(dp,0,sizeof(dp)) ;
n = In() ; m = In() ;
for(register int i =1 ; i <= m ; i ++) {//读入
int u = In() , v = In() , w = In() ;
edge[i] = (node){u,v,w} ;
}
sort(edge+1 , edge+m+1 , cmp) ;//排序
int pos = 1 ;
for(register int i = 1 ;i <= m ;i ++) {//DP
if(i < m and edge[i].dis == edge[i+1].dis) continue ;//特判权值相同
for(register int k = pos ; k <= i ; k ++) cnt[edge[k].to] = max ( cnt[edge[k].to] , dp[edge[k].from] + 1 ) ;
for(register int k = pos ; k <= i ; k ++) dp[edge[k].to] = cnt[edge[k].to] ;
pos = i + 1 ;
}
cout << * max_element( dp + 1 , dp + n + 1 ) << endl ;//最大值函数
return 0;
}

随机推荐
- GDB调试core文件(2)
使用gdb和core dump迅速定位段错误 关键字:gdb.段错误.core dump 一.什么是core dump core:内存.核心的意思: dump:抛出,扔出: core dump:前提: ...
- log4net 初步使用
自从知道了log4net之后,就一直使用的它,一直没有问题,最近由于项目变动,便将一部分的代码分离出来,然后咋UI项目中调用loghelper,便发现在本地测试一切正常,可是发布到服务器之后便不正常了 ...
- Kafka0.7运行时报错 kafka/javaapi/consumer/ConsumerConnector : Unsupported major.minor version 51.0 解决
目前中央库中 org.apache.kafka 是用jdk1.7编译的, 故跑在1.6的jvm中会报错 解决方案: 1. 下载kafka源码, 本地sbt进行install, 编译前 java -ve ...
- Spark- ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
运行 mport org.apache.log4j.{Level, Logger} import org.apache.spark.rdd.RDD import org.apache.spark.{S ...
- tkinter之canvas(画布)
画布的例子: from tkinter import * root=Tk() root.title('简易绘图') can=Canvas(root,width=400,height=300,bg='# ...
- CentOS Wifi Connection
方法一: http://wiki.centos.org/HowTos/Laptops/WpaSupplicant http://www.cnblogs.com/tanghuimin0713/p/343 ...
- NOIP 2014【斗地主】
这真是道大火题. 因为保证数据随机,所以开始很多人直接用搜索 + 贪心水过去了,后来,为了遏制骗分这种不良风气的传播,各大 OJ 相继推出了斗地主加强版-- 正解: 先爆搜顺子,枚举打或不打,打多少张 ...
- [算法]Trie树
我是好文章的搬运工,原文来自博客园,博主一线码农,选自”6天通吃树结构“系列,地址:http://www.cnblogs.com/huangxincheng/archive/2012/11/25/27 ...
- makefile 使用【转载】
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...
- js中变量声明提前
demo1: var a=10; function b(){alert(a); var a=20; alert(a)} b()//undefined 20 因为:js编译器在执行b这个函数时,会把函数 ...

