CSU1081 ориентированный граф BFS

группировка команды

Описание
Центральный Южный университет ACM летний тренировочный лагерь собирается начать, обучение будет назвать все N игроков (соответственно пронумерованы 1, 2, ..., N) испытания путем подготовки рейтинга разделены на две группы, бывшие игроки делятся на K группа А, остальные члены группы разделены на B.

Но теперь помощник тренера CSGrandeur случайно потерял учебные места испытания, но не любой, прежде чем он будет определять группу А и группу сотрудников B, то обучение CSGrandeur сотрудники намерены спросить их, что каждый ранг, чтобы группа игроков, чтобы определить, что.

Однако, как игроки тренируют рейтинга как грязь, только смутно помню, что некоторые люди пришли в их собственной спине, обратно до конечного общих М сообщения CSGrandeur здесь, каждое сообщение может использовать кортеж (х, у) (х! = у) говорит, что означает Y-ранг игроков полагаться на своем собственном после более чем х игроки помнят.

Теперь CSGrandeur хотят знать, в соответствии с частями M информации, вы можете определить, является ли группа игроков это? (По умолчанию, вся информация отражается в подготовке игроков с фактами.)

Входные данные
ввода , включающий в себя множество наборов тестовых данных.

Для каждого испытания, первая строка содержит три натуральное число N (2 <= N <= 1000), К (1 <= K <= N), М (1 <= М <= 10000), то есть выше. Следующие M строк каждый имеет два положительных целых числа х, у (1 <= х, у <= N, а Х! = Y) описывают части M информации, для каждой пары х, у, х представляет каждое имя Я помню первые игроки команды в рейтинге после у, чем их собственные, чтобы положиться.

Выходные данные
Для каждого теста, можно определить , если члены группы А, выход «ДА» (без кавычек), а в противном случае выдает сообщение «NO» (без кавычек).

Пример ввода

3 1 2 
1 2 
1 3 

3 2 2 
1 2 
1 3

Пример вывода

ДА 
НЕТ

намек

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

#include <бит / STDC ++ Х.>
 что используя  пространство имен STD;
 Const  INT MAXN = 1E5 + 5. ,
 Int First [MAXN], Следующая [MAXN], Край [MAXN] [ 2 ];
 Int VIS [MAXN];
 Int добавления ( INT , INT B, INT с) 
{ 
    Далее [с] = первый [а]; // Следующая информация для указания на первое вхождение; 
    первое [а] = с; // метка появляется в текущем сообщении гр 
    края [C] , [ 0 ] = A; 
    Грань [C] [ 1. =] B; 
} 
Очередь < INT > Q;
INT BFS ( INT я) 
{ 

    MemSet (Vis, 0 , SizeOf (VIS));
    в то время как (! q.empty ()) 
        q.pop (); 
    q.push (я); 
    INT CNT = 0 ; 
    Vis [I] = 1 ;
    в то время как (! q.empty ()) 
    { 
        INT т = q.front (); 
        q.pop (); 
        для ( Int J = первый [т]; у = - 1 , J = следующая [у]) 
        { 
            если ( по отношению [ребро [у] [ 1 ]] == 0 )
            {
                по отношению [край [J] [ 1 ]] = 1 ; 
                q.push (край [J] [ 1 ]); 
                CNT ++ ; 
            } 
        } 
    } 
    Вернуть CNT; 
} 
INT основных () 
{ 
    INT п, т, к;
    INT хх, уу;
    в то время как (Scanf ( " % D% D% D " , & п, & м, & к) =! EOF) 
    { 
        MemSet (первый, - 1 , SizeOf (первого)); 
        MemSet (рядом, 0 , SizeOf(следующий));
        INT СЧТ1 = 0 ;
        для ( INT I = 0 ; г <к; я ++ ) 
        { 
            Scanf ( " % D% D " , & хх, & уу); 
            добавить (хх, уу, я); 
        } 
        Для ( INT I = 1 ; г <= п; я ++ ) 
        { 
            если (BFS (я)> = (п - т)) 
            { 
                СЧТ1 ++ ; 
            } 
        } 
        Если (СЧТ1> = м) 
            Е ( "ДА \ п" );
         Еще 
            Е ( " НЕТ \ п " ); 
    } 
}

 

рекомендация

отwww.cnblogs.com/wakaka12345/p/11470631.html