codeforces 459E

E. Pashmak and Graph

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Pashmak's homework is a problem about graphs. Although he always tries to do his homework completely, he can't solve this problem. As you know, he's really weak at graph theory; so try to help him in solving the problem.

You are given a weighted directed graph with n vertices and m edges. You need to find a path (perhaps, non-simple) with maximum number of edges, such that the weights of the edges increase along the path. In other words, each edge of the path must have strictly greater weight than the previous edge in the path.

Help Pashmak, print the number of edges in the required path.

Input

The first line contains two integers n, m (2 ≤ n ≤ 3·105; 1 ≤ m ≤ min(n·(n - 1), 3·105)). Then, m lines follows. The i-th line contains three space separated integers: ui, vi, wi (1 ≤ ui, vi ≤ n; 1 ≤ wi ≤ 105) which indicates that there's a directed edge with weight wi from vertex ui to vertex vi.

It's guaranteed that the graph doesn't contain self-loops and multiple edges.

Output

Print a single integer — the answer to the problem.

Sample test(s)

input

3 3 
1 2 1 
2 3 1 
3 1 1

output

1

input

3 3 
1 2 1 
2 3 2 
3 1 3

output

3

input

6 7 
1 2 1 
3 2 5 
2 4 2 
2 5 2 
2 6 9 
5 4 3 
4 3 4

output

6

Note

In the first sample the maximum trail can be any of this trails:

.

In the second sample the maximum trail is

.

In the third sample the maximum trail is

.

题目类型:DP

思路:1. dfs铁定超时,因为一开始没想到办法如何两条边去更新一个点时存储哪一个

2.看到排序之后立马有思路,但是还是超时?!为什么?因为我不是更新的点,是去更新的边,这样一条边可能会被访问很多很多次,而如果访问点的话,一条边只需要被访问一次(当然后来修改为AC的之后一条边可能被访问2次),当然就算不超时,后面也会wa的为什么呢?下面解释、、

3.修改为更新点,wa一次。。因为当更新第一次后,后面相同的wei可能会被放弃,最后面的一组样例就是这样错的,使用vector存储要更新的点

4.改了之后还是wa,因为要更新的点覆盖了之前这个点的更新信息,所以用pair存储就可以了

 #include<iostream>

 #include<cstdio>

 #include<cstring>

 #include<vector>

 #include<cmath>

 #include<map>

 #include<algorithm>

 #define M(a,b) memset(a,b,sizeof(a))

 using namespace std;

 int n,m;

 int res;

 int p[];

 int psave[];

 struct ed

 {

     int from;

     int to;

     int wei;

     bool operator < (const ed& rhs) const

     {

         return wei<rhs.wei;

     }

 }edge[];

 vector<pair<int,int> > g;

 void dp()

 {

     int pre = edge[].wei;

     //cout<<u<<'!'<<endl;

     for(int i = ;i<m;i++)

     {

         if(pre!=edge[i].wei)

         {

             pre = edge[i].wei;

             for(int j = ;j<g.size();j++)

                 if(g[j].second>p[g[j].first]) p[g[j].first] = g[j].second;

             g.clear();

         }

         //cout<<edge[i].from<<' '<<edge[i].to<<' '<<p[edge[i].from]<<' '<<pw[edge[i].from]<<endl;

         if(p[edge[i].from]+>p[edge[i].to])

         {

               g.push_back(make_pair(edge[i].to,p[edge[i].from]+));

               if(p[edge[i].from]+>res) res = p[edge[i].from]+;

         }

     }

     for(int j = ;j<g.size();j++)

             if(psave[g[j].second]>p[g[j].first]) p[g[j].first] = psave[g[j].second];

     return;

 }

 int main()

 {

    while(scanf("%d%d",&n,&m)==)

    {

        int u,v,w;

        res = ;

        M(p,);

        for(int i = ;i<m;i++)

        {

            scanf("%d%d%d",&u,&v,&w);

            edge[i].from = u;

            edge[i].to = v;

            edge[i].wei = w;

        }

        sort(edge,edge+m);

        //  cout<<temu<<endl;

        p[edge[].from] = ;

        dp();

        for(int i = ;i<n;i++)

        {

            if(p[i]>res)

             res = p[i];

        }

        printf("%d\n",res);

    }

    return ;

 }

 /*

 9 8

 1 2 1

 2 3 2

 4 5 1

 5 6 2

 6 3 3

 3 7 4

 7 8 5

 8 9 6

 */

codeforces 459E的更多相关文章

  1. Codeforces 459E Pashmak and Graph(dp+贪婪)

    题目链接:Codeforces 459E Pashmak and Graph 题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径. 解题思路:将边依 ...

  2. Codeforces 459E Pashmak and Graph

    http://www.codeforces.com/problemset/problem/459/E 题意: 给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度. 思路:用f存 ...

  3. Codeforces 459E Pashmak and Graph:dp + 贪心

    题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...

  4. CodeForces - 459E Pashmak and Graph[贪心优化dp]

    E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. codeforces 459E E. Pashmak and Graph(dp+sort)

    题目链接: E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input st ...

  6. Codeforces 459E Roland and Rose

    本以为是个树形DP,按照树形DP的方法在那里dfs,结果WA到死,因为它存在有向环,不是树,凡是存在环的情况切记不要用树形的方法去做 题目的突破点在于将边排完序之后,用点表示以该点为边结尾的最大长度, ...

  7. LUXURY 7

    A.Little Pony and Expected Maximum Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:% ...

  8. Codeforces Round #261 (Div. 2) - E (459E)

    题目连接:http://codeforces.com/contest/459/problem/E 题目大意:给定一张有向图,无自环无重边,每条边有一个边权,求最长严格上升路径长度.(1≤n,m≤3 * ...

  9. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

随机推荐

  1. HTML 学习笔记 JavaScript(面向对象)

    现在让我们继续跟着大神的脚步前进 学习一下JavaScript中的面向对象的思想,其实作为一个iOS开发者,对面向对象还是比较熟悉的,但是昨晚看了一下Js中的面向对象,妈蛋 一脸萌比啊.还好有大神.让 ...

  2. C#体检套餐项目

    使用泛型集合写的一个小项目 1.要实现新建体检套餐,并且如果已经有了该体检套餐就不能再次新建, 2.要实现套餐列表动态更新,没添加一个体检套餐,在套餐列表里就自动添加一项; 3.向当前套餐类表里添加检 ...

  3. [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  4. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!

    开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位.   FineUI(开源版)v4.2.2 是 8 年 ...

  5. ASP.NET Core MVC 在linux上的创建及发布

    前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...

  6. chrome中获取元素的样式

    以获取背景颜色为例 html部分 <div id="test">abcd</div> css部分 #test { background-color: rgb ...

  7. linux设置定时备份mysql数据库

    最近写自己的项目,买了阿里云服务器,可以在云上根据自己想到的需求随意使用技术,感觉很爽.备份mysql流程如下: 环境:CentOS Linux release 7.2.1511 (Core) mys ...

  8. Qt界面编程之多窗口切换

    1.基础知识 信号和槽 信号和槽都是函数,用来完成信号间的协同操作 2.多窗口切换实例       功能 实现登录和重新登录功能 组成 登录界面 和主窗体界面 3.源代码提供  

  9. django 基础篇

    jdango 简介: 一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以 小的代价构建和维护高质量的Web应用. Python的WEB框架有Django.Tornad ...

  10. BZOJ 1876: [SDOI2009]SuperGCD

    1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3060  Solved: 1036[Submit][St ...