无聊的草稿
来源:互联网 发布:去网吧带windows to go 编辑:程序博客网 时间:2024/05/18 03:09
Description
图中有N个点,每两点间只有唯一的路径,对于这样一个给定的图,最大的“毛毛虫”会有多大。毛毛虫包含一条主链,毛毛虫中的节点,要不在主链上,要么和主链上某节点相邻,如下图所示有两只合法的毛毛虫,点数越多,毛毛虫越大。
Input
输入文件第一行两个整数N,M(N≤1000000)
接下来M行,每行两个整数a, b(a, b≤N)
你可以假定没有一对相同的(a, b)会出现一次以上。
Output
一个整数ans,表示最大的毛毛虫的大小。
Sample Input
5 4
1 2
1 3
4 1
5 1
The Solution
这道题的题目大意就是要求一段树上最长链。。。
我们可以先将每个点转化为一个带权的点,权为该点的度数,
然后就和在一棵树上求最长链一样了。。。
可以用两个dfs求。
Code
#include <cstdio>#include <iostream>#include <algorithm>#define fo(i,a,b) for (int i=a;i<=b;i++)#define N 1000005using namespace std;int t[N*2],last[N*2],next[N*2],a[N*2];int n,m,l=0,q=0,ans=0;void add(int x,int y){ a[x]++; t[++l]=y; next[l]=last[x]; last[x]=l;}void dg(int x,int y,int z){ if (z>ans) ans=z,q=x; for (int k=last[x];k;k=next[k]) if (t[k]!=y) dg(t[k],x,z+a[t[k]]-1); }int main(){ int x,y; scanf("%d%d",&n,&m); fo(i,1,m) scanf("%d%d",&x,&y),add(x,y),add(y,x); dg(1,0,a[1]+1); dg(q,0,a[q]+1); printf("%d\n",ans);}
0 0
- 无聊的草稿
- JZOJ1752. 无聊的草稿
- JZOJ 1752. 无聊的草稿
- @高三--我的一些语录,一些心情。上课无聊,写在草稿本上的
- 无聊的
- 无聊写的无聊东西
- 我的草稿不见了!
- 我的工作草稿
- 我的草稿本
- 二重积分的性质草稿
- 字符串的排列(草稿)
- 无聊的圣诞节 无聊的周末 无聊的僵尸III
- 无聊的人做着无聊的事,说着无聊的话
- 无聊的工作,无聊的人
- 无聊的企业开发,无聊的业务。。。
- 无聊的人做无聊的事情
- 无聊的QQ,无聊的360
- 无聊的生活,无聊的世界
- 分布式系统如何生成全局唯一的ID
- 【黑色科技】Pokemon Go 游戏教程
- 设计模式-迭代器模式
- Codeforces 691D. Swaps in Permutation (并查集 + 优先队列)
- React 快速入门教程
- 无聊的草稿
- LC 电路
- TextView按下background和textColor一起改变
- 《编程之法》1.5回文判断
- set global read_only=0; 关闭只读,可以读写 set global read_only=1; 开始只读模式
- Android uiautomator实例使用
- java 泛型
- Swift快速集成函数使用篇(生成二维码)
- 【BNUOJ】【第十四届北京师范大学程序设计竞赛决赛】D. Air Hockey