2017年4月4日考试总结

编程入门 行业动态 更新时间:2024-10-13 04:20:50

2017年4月4日<a href=https://www.elefans.com/category/jswz/34/1770106.html style=考试总结"/>

2017年4月4日考试总结

第一题:最长链

题目描述:给定一棵有n个节点的树,求每个节点到其他节点的最大距离

输入:第一行是一个自然数n(n≤10000),接下来 (n−1)行描述: 第i行包含两个自然数, 表示编号为i的节点连接到的节点编号和这条网线的长度..距离总长不会超过10^9.每行中的两个数字用空格隔开.

输出:包含n行.第i行表示对于离编号为i的节点最远的节点与该节点的距离Si(1≤i≤n).

成绩:AC

题解:g[x][0]和g[x][1]表示以1为根的树中,x子树中的最长链和次长链(不能有相同的边)dp[x][0],dp[x][1]表示整棵树中过x的最远距离和次远距离(也不能有相同的边)。

(方程式情况难以描述,就不打了23333333)

P.s:法二:树的直径。

分析:前一天刚讲过,还是写得很快的~\(≧▽≦)/~啦啦啦。

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<stack>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
const int N=10000+10;
inline void getint(int&num){char c;int flag=1;num=0;while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;while(c>='0'&&c<='9'){num=num*10+c-48;c=getchar();}num*=flag;
}
struct bian{int v,w,next;
}arr[N<<1];
int n,a,w,cnt,fir[N],g[N][2],dp[N][2],tmp[7];
inline void link(int a,int b,int w){arr[++cnt].v=a,arr[cnt].w=w;arr[cnt].next=fir[b],fir[b]=cnt;
}
void work(int x,int pre){for(int i=fir[x];i;i=arr[i].next)if(arr[i].v!=pre){work(arr[i].v,x);if(g[arr[i].v][0]+arr[i].w>g[x][0])g[x][1]=g[x][0],g[x][0]=g[arr[i].v][0]+arr[i].

更多推荐

2017年4月4日考试总结

本文发布于:2024-02-06 11:49:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748787.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:考试

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!