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

时间:2022-08-11 19:17:03

问题 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;
}
}