[noip2007]树网的核(链上乱搞)
2017-10-22 17:25
239 查看
题目:
我是超链接题解:
先找一条直径然后标记这条链,然后从一个端点A开始枚举长度不超过s的另一端点B,对于所有的链上点都求一个这样的点对,对于每一个点对求一个偏心距怎么求呢?
偏心距需要比较几个量求其中的最大值:B到链的一端、A到链的另一端、链上所有点 不经过直径上的点 到达的最远距离(除AB【因为AB到一端的距离肯定比 不经过直径上的点的距离大啊,没必要比较,不然这个长度为什么不成为直径呢?】)
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 1005 #define INF 1e9 using namespace std; int tot,nxt[N*2],point ,v[N*2],c[N*2]; int dis ,lian ,cnt,disx ,maxx,father ,lj; bool vis ,wh ; void addline(int x,int y,int z) { ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; c[tot]=z; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x; c[tot]=z; } void dfs(int x,int fa,int &gen) { if (maxx<dis[x]) maxx=dis[x],gen=x; father[x]=fa; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) { dis[v[i]]=dis[x]+c[i]; dfs(v[i],x,gen); } } void Chain(int x) { while (x) { wh[x]=1; lian[++cnt]=x; x=father[x]; } } void dfs1(int x,int fa) { for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa && !wh[v[i]]) { lj+=c[i];dfs1(v[i],x); if (!fa) disx[x]=max(disx[x],lj),lj=0; } } int main() { int n,s,i,j,gen,gen2; scanf("%d%d",&n,&s); for (i=1;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); addline(x,y,z); } dfs(1,0,gen); maxx=0;memset(dis,0,sizeof(dis)); dfs(gen,0,gen2); Chain(gen2); for (i=1;i<=cnt;i++) lj=0,dfs1(lian[i],0); int ans=INF; for (i=cnt;i>=1;i--) { j=gen2; while (j!=lian[i] && dis[j]-dis[lian[i]]>s) j=father[j]; int it=0; it=max(dis[gen2]-dis[j],dis[lian[i]]); while (j!=lian[i]) it=max(it,disx[j]),j=father[j]; ans=min(ans,it); } printf("%d",ans); }
相关文章推荐
- BZOJ 1999: [Noip2007]Core树网的核[dfs]
- 1999: [Noip2007]Core树网的核
- 【BZOJ】1999 [Noip2007]Core树网的核 树的直径+DFS
- 【NOIP2007提高组T4】树网的核-Floyd最短路+枚举
- [树的直径] BZOJ 1999 [Noip2007]Core树网的核
- 1999: [Noip2007]Core树网的核 树形dp 单调队列
- bzoj1999 [Noip2007]Core树网的核(树的直径+单调队列+贪心)
- 【bzoj1999】[Noip2007]Core树网的核 树的直径+双指针法+单调队列
- bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】
- BZOJ_1999_[Noip2007]Core树网的核_单调队列+树形DP
- 【原题】【noip2007 T4】树网的核(图论,最短路)
- BZOJ 1999 [Noip2007]树网的核(2282 [Sdoi2011]消防) - 树的直径+单调队列
- [NOIP2007]树网的核【搜索,最短路…
- noip2007树网的核
- 1999: [Noip2007]Core树网的核
- 【DFS好题】BZOJ1999- [Noip2007]Core树网的核(数据加强版)
- BZOJ1999: [Noip2007]Core树网的核(洛谷P1099)
- BZOJ 1999: [Noip2007]Core树网的核【最长链】
- NOIP 2007树网的核
- BZOJ1999 && noip2007树网的核