首页 > 其他分享 >Codeforces Round #805 (Div. 3) G2

Codeforces Round #805 (Div. 3) G2

时间:2022-11-29 21:36:07浏览次数:57  
标签:p2 p1 G2 int Codeforces lca Div mx

G2. Passable Paths (hard version)

题链
我们思考一条链的特性
发现只要“确定”两端之后 就可以用LCA一遍判断是否是一条链的
我们如何确定两端 首先深度最深的一定是一端p1
另一端p2也可以用LCA判断 我们p2一定是与lca(p1,p2)!=p1,p2
让后我们也要最深的一个点
然后我们就O(nlog)判断即可
一般来说都是挂在一个点上的一条链 这个我们就枚举每一个p 他要吗在p1这边=>lca(p1,p)=p&&lca(p2,p)=lca(p1,p2)
在p2一边同理
还有一种特殊情况就是不是挂着 就是一条链 这样我们显然连p2都选不出来

void solve(){
    cin>>n;
    memset(h,-1,sizeof h);
    for(int i=1;i<n;i++){
        int u,v;cin>>u>>v;
        add(u,v),add(v,u);
    }
    dfs(1);
    int q;cin>>q;
    while(q--){
        int m;cin>>m;
        int mx=-INF,p1,p2;
        for(int i=0;i<m;i++){
            cin>>a[i];
            if(d[a[i]]>mx){
                mx=d[a[i]];
                p1=a[i];
            }
        }
        mx=-INF;
        int flag=0;
        for(int i=0;i<m;i++){
            if(lca(p1,a[i])!=a[i]&&d[a[i]]>mx){
                mx=d[a[i]];
                p2=a[i];
                flag=1;
            }
        }
        if(!flag){YES continue;}
        int rt=lca(p1,p2);
        for(int i=0;i<m;i++){
            if((lca(a[i],p1)==a[i]&&lca(a[i],p2)==rt)||
               (lca(a[i],p2)==a[i])&&lca(a[i],p1)==rt)continue;
            else {NO goto out;}
        }
        YES
        out:1;
    }
}

标签:p2,p1,G2,int,Codeforces,lca,Div,mx
From: https://www.cnblogs.com/ycllz/p/16936775.html

相关文章

  • Codeforces Round #836 (Div. 2) A-D题解
    比赛链接A、SSeeeeiinnggDDoouubbllee一个字符串的每个字母翻倍,且没有其他限制。所以把字符串正着输一遍,再倒叙输出一遍即可。点击查看代码#include<bits/stdc++.h>......
  • Codeforces Global Round 24 D
    D.Doremy'sPeggingGame题目链接挺难的一道计数计数问题最重要的是考虑如果划分集合然后不重不漏地计算出来我们考虑枚举每一个序列的结束点就是有n个然后这n个显......
  • Codeforces Round #836 (Div. 2)(A~D)
    A每个字符出现次数都是偶数,直接拼接defsolve():s=input()t=sprint(s+t[::-1])t=int(input())foriinrange(t):solve()B奇数个的情况下n个相同的......
  • Codeforces Round #826 (Div. 3) F
    F.Multi-ColoredSegments洛谷最优解显然我们对于每一个线段可以分成左右两端考虑我们先按照lsort一遍然后每次计算与他最近的值我们维护两个最大的r即可然后每次......
  • 除法(Division)
    ​​Division​​TimeLimit:3000MS MemoryLimit:Unknown 64bitIOFormat:%lld&%llu​​Submit ​​​​Status​​Description​​​​Writeaprogramthat......
  • 「题解」Codeforces 1765L Project Manager
    写了两个小时写吐了,你告诉我这玩意2400?如果不管假期的话,那么每一周必然会有一个项目跟进一次进度。那么答案就是线性的。即使有假期的存在也没关系,每个假期顶多就只会拖......
  • Codeforces Global Round 24(持续更新)
    Preface最近可能中了降智病毒,写什么都写不过下午打的校趣味赛看错题一个爆搜WA了四次,少罚一次时都Rank1了然后晚上CF先是C想半天,然后D作为曾经最擅长的计数题也漏想了一......
  • Codeforces Round #829 (Div. 1) C
    C.WishIKnewHowtoSort我们会发现此题的终点状态只有一个起点状态也只有一个所以我们的状态表示可以非常简单我们可以发现我们为了达到最终的状态我们用一些1来......
  • Spring2.0中文参考手册(中文版) [转自CSDN论坛]
    Spring中文参考手册得到SpringFramework开发团队的直接授权和大力的支持,其目的是在中文世界推广优秀的开源技术。本次翻译活动由满江红开放技术研究组织(​​http://www.re......
  • div垂直水平居中
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>div垂直水平居中</title><style>div{padding:16px32px24px;position:absolute;......