cf#338-B - Longtail Hedgehog-dag_dp
2016-01-10 14:01
363 查看
http://codeforces.com/contest/615/problem/B
题意 给你一个图,不一定联通
n=1e5,m=2e5
符合题意的一条路 是 从头到尾 每个节点都是递增的。 如 1 - 2 -5合法 1 - 5 -4不合法
求最大的ans值 ,ans值等于某条合法路径的节点数 乘上 【整个图】 与末尾端点的连接的点的个数 如 1- 2 -5 ,如果5共有3个点与其相连,那么这条路的ans=3*3=9;
直接dfs肯定会超时啦。
我们只需要求出 以每个节点 为【末尾端点】时,所在路径的长度,然后ans值就可以直接得到了
在dfs过程中 用个dp数组,dp[x]记录点x为结束端点的时候 所在路径长度。
注意,如果dfs是按 递增的顺序走的话,不好得到以x为结束端点的长度,我们可以 反过来玩,按递减的顺序走,得到的dp[x]便是我们所要的了。
题意 给你一个图,不一定联通
n=1e5,m=2e5
符合题意的一条路 是 从头到尾 每个节点都是递增的。 如 1 - 2 -5合法 1 - 5 -4不合法
求最大的ans值 ,ans值等于某条合法路径的节点数 乘上 【整个图】 与末尾端点的连接的点的个数 如 1- 2 -5 ,如果5共有3个点与其相连,那么这条路的ans=3*3=9;
直接dfs肯定会超时啦。
我们只需要求出 以每个节点 为【末尾端点】时,所在路径的长度,然后ans值就可以直接得到了
在dfs过程中 用个dp数组,dp[x]记录点x为结束端点的时候 所在路径长度。
注意,如果dfs是按 递增的顺序走的话,不好得到以x为结束端点的长度,我们可以 反过来玩,按递减的顺序走,得到的dp[x]便是我们所要的了。
#include <cstdio> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <stack> #include <vector> #include <iostream> using namespace std; __int64 min(__int64 a,__int64 b){return a<b?a:b;} __int64 max(__int64 a,__int64 b){return a>b?a:b;} vector<__int64> tm[100005]; __int64 dp[200005]; __int64 dfs(__int64 x ) { if (dp[x]) return dp[x]; dp[x]=1; for(__int64 i=0;i<tm[x].size();i++) { if (tm[x][i]>x)continue; //递减地走 dp[x]=max(dp[x],dfs(tm[x][i])+1); } return dp[x]; } int main() { __int64 i,j,k; __int64 n,m; __int64 tmp,tt; __int64 t1,t2; scanf("%I64d%I64d",&n,&m); for (i=1;i<=m;i++) { scanf("%I64d%I64d",&t1,&t2); tm[t1].push_back(t2); tm[t2].push_back(t1); } __int64 maxx=0; for(i=1;i<=n;i++) { maxx=max(maxx,dfs(i )*tm[i].size()); } printf("%I64d\n",maxx); return 0; }
相关文章推荐
- 解决TIME_WAIT过多问题
- 【学习笔记】《STL使用入门教程》第四讲:容器set、函数对象functor与对组pair
- Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'问题解决方法
- zabbix通过sendmail进行邮箱警报
- zabbix通过sendmail进行邮箱警报
- 3172: [Tjoi2013]单词 fail树
- LeetCode:219. Contains Duplicate II
- c++ 友元函数 还是不能访问私有成员。。 http://zhidao.baidu.com/link?url=Ccm5gZvOc733A_YsS2kj-LZsVtdwu6BT3WR97u66jZAZ1
- Android USB Connections Explained: MTP, PTP, and USB Mass Storage
- 安卓学习-谷歌官方文档翻译01-Training-GettingStarted
- LeetCode OJ - Container With Most Water
- <LeetCode OJ> 219. Contains Duplicate II
- Codeforces 615B Longtail Hedgehog (Round #338 (Div. 2) B题)
- Codeforces Round #338 (Div. 2) B. Longtail Hedgehog DP
- int main(int argc,char* argv[])详解
- clang: error: linker command failed with exit code 1 (use -v to see invocation)错误问题
- Codeforces Round #338 (Div. 2) B. Longtail Hedgehog(LIS)
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars
- AI学习笔记和制作棋子的教程
- [leetcode oj 217]Contains Duplicate