$ Noip2014 / Luogu2296 $ ищет дорожную карту

$ Luogu $

 

$ Sol $

Во-первых, найти точку в квалификации, а затем побежал, как пара $ SPFA $.

Как определить, является ли условия для его точки? Еще до анти-стороны, запись каждой точки, а затем начать с конца $ Dfs $, записать число достигло каждой точки, если число раз равное его досягаемости в градусах и не $ 0 $ то, что отвечают смысл вопросов.

Почему $ $ Noip2014 $ 4 $ Дориана Я чувствую саму проблему воды.

 

$ Код $

 

#include <iostream> 
#include <cstdio> 
#include <CString> 
#include <очереди> 
#include <алгоритм>
 #define IL инлайн
 #define Rg регистре
 #define идти (я, а, б) для (Rg INT I = а ; г <= Ь; ++ я)
 #define да (я, а, б) для (Rg INT I = а, я> = Ь, - я)
 #define е (я, и) для (Rg ИНТ я = Ь [и]; я; I = A [I] .nt)
 #define MEM (а, б) MemSet (а, б, SizeOf (а))
 #define LL долго долго
 #define дБ двойной
 #define инф 2147483647
 используя Пространство  имен станд; 
иль ИНТ чтения () 
{ 
    RgINT х = 0 , у = 1 ; символ с = GetChar ();
    в то время как (с < ' 0 ' || с> ' 9 ' ) { если (с == ' - ' ) у = - 1 ; с = GetChar ();}
     , а (с> = ' 0 ' && с <= ' 9 ' ) {х = (х << 1 ) + (х << 3 ) + с- ' 0 ' ; с = GetChar ();}
     возвращение х * у;
 N = 10010 , М = 200010 ;
INT п, т, б [N], CT, дю [N], с, т, по отношению [N], дис [N];
BOOL П [Н]; 
Очередь < INT > д;
структура ND1 { Int U, V;} , например , [М];
структура й { INT v, нт;} а [М]; 
IL недействительными добавить ( INT и, INT v) {а [++ кт] = (й) {v, Ь [и]}; б [и] = кт;} 
IL аннулируются ДФС ( INT и) 
{ 
    е (я, и) 
    { 
        Rg INT V = а [я] .v; Vis [v] ++ ;
        если ( по отношению [v]>1 ) продолжить ; 
        ДФС (v); 
    } 
} 
IL недействительный SPFA () 
{ 
    MEM (Vis, 0 ); MEM (дис, 63 ); 
    по отношению [с] = 1 ; дис [с] = 0 ; q.push (с);
    в то время как (! q.empty ()) 
    { 
        Rg ИНТ и = q.front (); q.pop () по отношению [и] = 0 ; 
        е (я, и) 
        { 
            Rg INT V = а [я] .v;
            если (П [v]!) по- прежнему ;
            если(дис [v]> дис [U] + 1 ) 
            { 
                дис [v] = дис [и] + 1 ;
                если {визави [v] = (визави [v]!) 1 ; q.push (v);} 
            } 
        } 
    } 
} 
иль BOOL CMP (ND1 х, ND1 у) { возвращение Xu == уи хи <уи: Xu < ю;}
 INT основных () 
{ 
    п = следующим образом (), т = следующим образом (); 
    перейти (я, 1 , м) 
    { 
        Rg INT и = следующим образом (), V = следующим образом ();
        если (и == v) продолжить ;
        например , [I]= (ND1) {U, V}; // добавить (v, и), ди [и] ++; 
    } 
    Сортировки (например , + 1 , например , + т + 1 , CMP); 
    Rg INT нм = 0 ; 
    перейти (я, 1 , м) 
    { 
        если (например , [я] == .u , например , [i - 1 ] .u && , например , [я] .в == например , [i - 1 ] .в) {нм ++; продолжить ;} 
        добавить (например , [я] .в, например , [я] .u), ди [например , [я] .u] ++ ; 
    } 
    М - = нм; 
    s = следующим образом (), Т = следующим образом (); подкачки (с, т); 
    VIS [с] = 1 ; ДФС (с); 
    идти (я,1 , п) , если (( по отношению [я] == дю [I] && отношению [I]) || я == ы) П [I] = 1 ;
    если (! П [с]) {Е ( " -1 \ п " ); возвращать  0 ;} 
    SPFA (); 
    если (дис [т]> М) Е ( " -1 \ п " );
    еще Е ( " % d \ п " , дис [т]);
    вернуться  0 ; 
}
Просмотр кода

 

 

 

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

отwww.cnblogs.com/forward777/p/11412563.html
рекомендация