[题解]2025CCPC东北邀请赛 - 王国——求策

  • 题源:王国——求策 - GYM
  • 题意:给定左右各为 n n n 个点的完全二分图 † ^{\dag} ,其中不同属性的两点间存在唯一的敌对关系点对 ( u , v ) (u,v) (u,v) 。给定源点 s s s 与终点 t t t,询问图中是否存在一条不同时包含互为敌对关系的两点的路径,使 s s s 到达 t t t
    † \dag 完全二分图:二分图是指两种属性的点位于两侧,且仅不同属性的点间存在边的图;完全二分图是指对于每个点,其均与另一属性的点有且仅存在一条边的特殊二分图。
  • 关键词:思维(签到)
  • 题解:不难发现,当 s s s t t t 位于异侧时,仅需 s s s 不与 t t t 互为敌对关系即可到达;当 s s s t t t 位于同侧时,对侧点仅有 2 2 2 个点分别互为敌对关系,因此当 n > 2 n>2 n>2 时即一定可达。需注意 s = t s=t s=t 的情形,此时一定可达。
  • 代码:
#include<bits/stdc++.h>

using namespace std;
using ll=long long;
#define int ll
#define endl "\n"

void solve(){
    int n,s,t;cin>>n>>s>>t;
    vector<int>a(n<<1|1);
    for(int i=1;i<=n;i++) cin>>a[i],a[a[i]]=i;//注意敌对关系为双向的
    if(s==t){
        cout<<"Yes"<<endl;
        return;
    }
    if(s<=n&&t<=n||s>n&&t>n){//同侧
        if(n>2) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }else{//异侧
        if(a[s]!=t&&a[t]!=s) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;cin>>t;
    while(t--) solve();
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值