zoukankan      html  css  js  c++  java
  • LOJ10159旅游规划

    题目描述

    W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员。

    具体来说,W 市的交通网络十分简单,由 n 个交叉路口和 n-1 条街道构成,交叉路口路口编号依次为 0,1,,n1 。任意一条街道连接两个交叉路口,且任意两个交叉路口间都存在一条路径互相连接。

    经过长期调查,结果显示,如果一个交叉路口位于 W 市交通网最长路径上,那么这个路口必定拥挤不堪。所谓最长路径,定义为某条路径 p=(v1,v2,v3,,vk),路径经过的路口各不相同,且城市中不存在长度大于 k 的路径,因此最长路径可能不唯一。因此 W 市市长想知道哪些路口位于城市交通网的最长路径上。

    输入格式

    第一行一个整数 n;

    之后 n-1 行每行两个整数 u,v,表示 u 和 v 的路口间存在着一条街道。

    输出格式

    输出包括若干行,每行包括一个整数——某个位于最长路径上的路口编号。为了确保解唯一,请将所有最长路径上的路口编号按编号顺序由小到大依次输出。

    样例

    样例输入

    10
    0 1
    0 2
    0 4
    0 6
    0 7
    1 3
    2 5
    4 8
    6 9

    样例输出

    0
    1
    2
    3
    4
    5
    6
    8
    9

    数据范围与提示

    对于全部数据,1n2×10^5。

    _____________________________________________________________________________________________________________

    树形动态规划,典型的求最长链,变化就是加了一个求链上的点。

    写的过程中没有注意到点的多次加入,所以错了!

    _____________________________________________________________________________________________________________

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=2e5+10;
     4 int n;
     5 struct edge
     6 {
     7     int u,v,nxt;
     8 }e[maxn<<1];
     9 int head[maxn],js;
    10 void addage(int u,int v)
    11 {
    12     e[++js].u=u;e[js].v=v;
    13     e[js].nxt=head[u];head[u]=js;
    14 }
    15 int ml[maxn],sl[maxn];
    16 int ans=0;
    17 void dp(int u,int fa)
    18 {
    19     for(int i=head[u];i!=-1;i=e[i].nxt)
    20     {
    21         int v=e[i].v;
    22         if(v!=fa)
    23         {
    24             dp(v,u);
    25             if(ml[v]+1>ml[u])
    26             {
    27                 sl[u]=ml[u];
    28                 ml[u]=ml[v]+1;
    29             }
    30             else if(ml[v]+1>sl[u])
    31                 sl[u]=ml[v]+1;
    32         }
    33     }
    34     if(ml[u]+sl[u]>ans)ans=ml[u]+sl[u];
    35 }
    36 int q[maxn],jss,bz[maxn];
    37 void work(int u,int fa,int len)
    38 {
    39     if(bz[u]==0)
    40     {
    41         q[jss++]=u;
    42         bz[u]=1;
    43     }
    44     for(int i=head[u];i!=-1;i=e[i].nxt)
    45     {
    46         int v=e[i].v;
    47         if(v!=fa)
    48         {
    49             if(ml[v]==len-1)work(v,u,len-1);
    50         }
    51     }
    52 }
    53 void dfs(int u,int fa)
    54 {
    55     if(ml[u]+sl[u]==ans)
    56     {
    57         if(ml[u]!=sl[u])work(u,fa,ml[u]);
    58         work(u,fa,sl[u]);
    59     }
    60     for(int i=head[u];i!=-1;i=e[i].nxt)
    61     {
    62         int v=e[i].v;
    63         if(v!=fa)dfs(v,u);
    64     }
    65 }
    66 int main()
    67 {
    68     scanf("%d",&n);
    69     memset(head,-1,sizeof(head));
    70     for(int u,v,i=1;i<n;++i)
    71     {
    72         scanf("%d%d",&u,&v);
    73         addage(u,v);addage(v,u);
    74     }
    75     dp(0,-1);
    76     dfs(0,-1);
    77     sort(q,q+jss);
    78     for(int i=0;i<jss;++i)printf("%d
    ",q[i]);
    79     return 0;
    80 }
  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/gryzy/p/10152590.html
Copyright © 2011-2022 走看看