2017河南工业大学校赛 H ch追妹

问题 H: ch追妹

题目描述

n个点的一张无向图,ch站在a点,ch要追的妹子站在b点。r_clover为了让ch安心训练,要阻止ch追妹。ch每走一步,r_clover就会挖断一条路。ch和r_clover均采用最优策略,问ch能不能追到妹子

输入

第一行为数据组数T(T≤10)。
每组数据的第一行为四个数 n,m,a,b(1≤a,bn≤20; 1≤m≤80),分别表示点数,边数,ch的位置,妹子的位置。
之后m行,每行两个数 u,v(1≤u,vn),表示u,v之间有一条无向边。数据保证没有重边和自环(即不会出现uu的边,也不会出现两条uv的边)。

输出

对每组数据输出一行,如果ch能够成功追妹,输出chhappy,否则输出chsad。

样例输入
22 1 1 21 23 2 1 31 22 3
样例输出
chhappychsad


解题思路:

    这题刚开始想了很久,最开始想会不会是第k短路问题,因为涉及到最优策略。之后又想了想最小割,涉及到切断路径。都没什么思路,最后开始思考什么样的图能使ch追妹成功,当ch位置和妹子位置相邻时肯定是成功的。当ch位置和妹子位置的最短路径为2时,这是ch前进一步,从距离为2的点到达距离为1的点,因为图中没有重边,所以距离为1的点和妹子位置只有一条边!!这时只需要切断这条边即可!!    所以当ch与妹子距离为2时是不可能成功的。。。以此类推。。。只有距离为1时才能成功


代码:

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,m,a,b;
        cin>>n>>m>>a>>b;
        int flag=0;
        for(int i=0;i<m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            if(v==a&&u==b||v==b&&u==a)  flag=1;
        }
        if(flag)
            cout<<"chhappy"<<endl;
        else
            cout<<"chsad"<<endl;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值