zoukankan      html  css  js  c++  java
  • bzoj 1023 [SHOI2008]cactus仙人掌图 ( poj 3567 Cactus Reloaded )——仙人掌直径模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023

       http://poj.org/problem?id=3567

    因为lyd在讲课,所以有了lyd的模板。感觉人家写得好好呀!于是学习(抄)了一下。可以记一记。

    反正各种优美。那个dp断环成链的地方那么流畅自然!tarjan里的那些 if 条件那么美!

    不过十分不明白为什么边要开成4倍的。开成2倍的真的会RE。怎么分析仙人掌的边数?

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=5e4+5;
    int n,m,hd[N],xnt,dfn[N],low[N],tim,fa[N],f[N],a[N<<1],q[N<<1],ans;//N<<1!!
    struct Ed{
      int nxt,to;Ed(int n=0,int t=0):nxt(n),to(t) {}
    }ed[N<<2];//<<2(?)
    void add(int x,int y)
    {
      ed[++xnt]=Ed(hd[x],y);hd[x]=xnt;
    }
    void dp(int x,int y)
    {
      int m,i,l,r,p;
      for(m=0;y!=x;y=fa[y])a[++m]=f[y];// a is value
      for(a[++m]=f[x],i=1;i<m;i++)a[m+i]=a[i];// 2*m-1 is enough
      l=r=q[1]=1;p=(m>>1);
      for(i=2;i<=m+p;i++)
        {
          while(l<=r&&i-q[l]>p)l++;
          ans=max(ans,a[q[l]]+a[i]+i-q[l]);// a[],not f already(i is pos on a[])
          while(l<=r&&a[i]>=a[q[r]]+i-q[r])r--;
          q[++r]=i;
        }
      for(int i=1;i<m;i++)f[x]=max(f[x],a[i]+min(i,m-i));
    }
    void tarjan(int cr)
    {
      dfn[cr]=low[cr]=++tim;
      for(int i=hd[cr],v;i;i=ed[i].nxt)
        if((v=ed[i].to)!=fa[cr])//!
          if(!dfn[v])
        {
          fa[v]=cr;tarjan(v);
          low[cr]=min(low[cr],low[v]);
          if(low[v]>dfn[cr])
            {
              ans=max(ans,f[cr]+f[v]+1);
              f[cr]=max(f[cr],f[v]+1);
            }
        }
          else low[cr]=min(low[cr],dfn[v]);
      for(int i=hd[cr],v;i;i=ed[i].nxt)
        if(fa[v=ed[i].to]!=cr&&dfn[v]>dfn[cr])dp(cr,v);
    }
    int main()
    {
      scanf("%d%d",&n,&m);int k,x,y;
      for(int i=1;i<=m;i++)
        {
          scanf("%d%d",&k,&x);
          for(int j=1;j<k;j++)
        {
          scanf("%d",&y);
          add(x,y);add(y,x);x=y;
        }
        }
      tarjan(1);
      printf("%d",ans);
      return 0;
    }
  • 相关阅读:
    CSS 中z-index全解析(摘自阿里西西)
    Video标签的使用
    HTML标签解释大全
    在html中插入音频
    ABAP更改现有程序
    乱糟糟的笔记
    ABAP提示信息对话框
    【学习】几种查找增强的方法
    【学习】ABAP OLE 对EXCEL的处理
    【转载】ABAP-如何读取内表的字段名称
  • 原文地址:https://www.cnblogs.com/Narh/p/9281201.html
Copyright © 2011-2022 走看看