Educational Codeforces Round 103 (Rated for Div. 2) C. Longest Simple Cycle(思维)

 

 

 

 有 n 条链,给出这 n 条链的长度 c[i]-1,从第二条链开始,a[i] 表示第 i 条链的头节点 1 链接前一条链的 a[i] 节点,b[i] 表示第 i 条链的尾节点链接前一条链的 b[i] 节点,在整张图中找到一个环,使得换的长度最大

题目与图没有任何关系,我们可以发现 a[i]=b[i] 时,之前所形成的链一定要断,即此时的 a[i] 一定是环中度为 2 的节点

如果 a[i]!=b[i] 那么就要判断是以之前的链继续,还是从 a[i] b[i] 开始重新建一条链(如下图所示) 

const int N=1e5+5;

    int n,m;
    int i,j,k;
    int a[N];
    int b[N],c[N];

int main()
{
    //IOS;
    rush(){
        sd(n);
        for(int i=1;i<=n;i++) sd(c[i]);
        for(int i=1;i<=n;i++) sd(a[i]);
        for(int i=1;i<=n;i++) sd(b[i]);
        for(int i=1;i<=n;i++) if(a[i]>b[i]) swap(a[i],b[i]);
        ll ans=0,cur=0;
        for(int i=2;i<=n;i++){
            if(a[i]==b[i] || i==2) cur=b[i]-a[i]+1;
            else cur=max(b[i]-a[i]+1ll,c[i-1]-b[i]+a[i]+cur+1);
            ans=max(ans,cur+c[i]);
        }
        pll(ans);
    }
    PAUSE;
    return 0;
}

 

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页