Codeforces 615B Longtail Hedgehog (Round #338 (Div. 2) B题)
2016-01-09 22:42
519 查看
题意
给你一个无向图,让你找到一个通路,路上的点是依次增大的,点的个数记为len然后找到所有连接到这条路末尾节点的边,数量为num
找到最大的num * len
思路
基本是枚举以第i个节点为结尾得到的num * lennum很好得到,开个数组记录下就好
len的话,用了个小dp,dp(j) = max(dp(i) + 1 , dp(j)) 存在(i,j)这条边
存图直接只记录从小编号点到大编号点的边,这样记录的直接是一个拓扑图,迭代就可以更新dp了
比赛时,WA了一回。。。没注意这是个无向图。。。。
实现
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define mp make_pair #define pb push_back #define fi first #define se second const int inf = 0x3f3f3f3f; const double eps = 1e-8; int n,m; int num = 0; const int maxn = 1e5 + 5; vector<int> g[maxn]; int ru[maxn]; ll ans = 0; int dp[maxn]; int main(){ //freopen("out.txt","r",stdin); cin>>n>>m; for (int i=0;i<m;i++){ int u,v; scanf("%d%d",&u,&v); ru[v]++; ru[u]++; if (v > u){ g[u].pb(v); } else{ g[v].pb(u); } } for (int i=1;i<=n;i++){ dp[i] = 1; } for (int u=1;u<=n;u++){ for (int i=0;i<g[u].size();i++){ int v = g[u][i]; dp[v] = max(dp[v],dp[u]+1); } ans = max(ans,(ll)dp[u] * (ll)ru[u]); } cout << ans <<"\n"; return 0; }
相关文章推荐
- 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
- Codeforces Round #338 (Div. 2) 615B Longtail Hedgehog(dp)
- Codeforces 615C:Longtail Hedgehog
- main函数的autoreleasepool有何用处
- LightOJ1021 Painful Bases(状压DP)
- 异步AIO的研究
- scu - 3254 - Rain and Fgj(最小点权割)
- 蓝牙写入出错,error isError Domain=CBATTErrorDomain Code=114 "Unknown ATT error."
- rails书籍展示添加游客评论
- Wait--使用sys.dm_io_virtual_file_stats来查看IO延迟
- 从notify-wait模式说去
- Contains Duplicate II leetcode
- 【转载】Kafka High Availability
- Contains Duplicate leetcode