Решение задачи №185 «Скачки» с ACMP





Решение задачи №185 «Скачки» с ACMP

Условие задачи

Иван Иванович любит ходить на скачки, надеясь на них заработать кругленькую сумму. Ему приглянулась лошадь с номером K, и он решил проверить, сможет ли она выиграть у всех остальных лошадей. Иван Иванович раздобыл информацию, в которой для некоторых пар лошадей сообщается, какая из этих лошадей быстрее. Также он узнал, что у всех лошадей разные скорости.

Требуется написать программу, которая поможет Ивану Ивановичу точно определить может ли выиграть выбранная им лошадь.

Входные данные
Входной файл INPUT.TXT содержит в первой строке два целых числа N (1 ≤ N ≤ 100) и K (1 ≤ K ≤ N), где N – количество лошадей, принимающих участие в скачках, K – номер лошади, на которую хочет сделать ставку Иван Иванович. Следующие строки содержат по два числа X и Y (1 ≤ X, Y ≤ N), обозначающие, что лошадь с номером X быстрее лошади с номером Y. Пары X и Y не повторяются. Набор данных завершается строкой, содержащей единственный ноль. Эту строку обрабатывать не надо.

Гарантируется, что информация, раздобытая Иваном Ивановичем, корректна.

Выходные данные
Выходной файл OUTPUT.TXT должен содержать слово «Yes», если Иван Иванович уверен в своем выигрыше и «No» в противном случае.

#include<iostream>
using namespace std;
int a[101][101],b[101],k,n;
void dfs(int j){
if(b[j])return;
b[j]=1;k++;
for(int i=1;i<=n;++i)
if(a[j][i])dfs(i);}
int main(){
int s,i,j;
cin>>n>>s;
do{cin>>i;
if(i){cin>>j;a[i][j]=1;}
}while(i);
b[s]=1;
for(j=1;j<=n;++j)
if(a[s][j])dfs(j);
if(k==n-1)cout<<"Yes";
else cout<<"No";
return 0;}



Условия задач взяты с сайта acmp.ru