Тема ссылки: http://acm.hdu.edu.cn/showproblem.php?pid=1829
И набор проверки приложений, чтобы обнаружить, есть ли противоречие, которое не должно быть двух непересекающихся множеств с пересечением. Эта проблема имеет два таких насекомых пола, каждая операция т раз, каждый раз, когда данный (а, б), если а и Ь появился тот же пол ошибки, что было определено, что существуют две секс ошибка. Моя стратегия также два набора, с дизъюнктным-набором для поддержания отношений между этими двумя группами. Посмотрите на конкретные доказательства моего предыдущего блога, доказательство правильности такого подхода.
Код выглядит следующим образом:
1 #include <бит / STDC ++ ч.> 2 ЬурейеЕ беззнаковое INT UI; 3 ЬурейеЕ долго долго LL; 4 ЬурейиЙ без знака длиной длинного Ull; 5 #define пф Printf 6 #define MEM (а, б) MemSet (а, б, SizeOf (а)) 7 #define prime1 1e9 + 7 8 #define prime2 1e9 + 9 9 #define пи 3,14159265 10 #define lson л, середина, к.т. << 1 11 #define rson середины + 1, г, к.т. << 1 | 1 12 #define Scand (х) зсапЕ ( "% LLF", & х) 13 #define F (я, а, б) для (INT I = а, я <= Ь; я ++) , 14 #define сканирование (а) зсапЕ ( "% d", & а) 15 #define тр (а, б) make_pair ((а), (б)) 16 #define Р пара <Int, Int> 17 #define ДБГ (арг) соиЬ << # арг << ":" << арг << епсИ; 18 #define инф 0x3f3f3f3f 19 Const INT maxn = 2E6 + 10 ; 20 INT п, т, т; 21 инлайн INT чтения () { 22 INT ANS = 0 , т = 1 ; 23 символ CH = GetChar (); 24 в то время как (isdigit (ч)!) { Если (ч == ' - ' ) ш = - 1 ; ч = GetChar ();} 25 , а (isdigit (ч)) ANS = (ANS << 3 ) + (ANS << 1 ) + CH- ' 0 ' , ч = GetChar (); 26 возвратных ансы * ш; 27 } 28 INT F [maxn], ранг [maxn]; 29 BOOL флаг; 30 недействительными инициализации () 31 { 32 F (я, 1 , 2 * п) П [г] = я, ранг [I] = 0; 33 флаг = ложь ; 34 } 35 INT находка ( INT х) 36 { 37 , если (х == Р [х]) возвращение х; 38 возврата Р [х] = находка (Р [х]); 39 } 40 пустот Союз ( INT х, INT у) 41 { 42 INT FX = найти (х); 43 INT FY = найти (у); 44 , если (== FX FY) возвращение ; 45 , если(ранг [FX] <ранг [FY]) F [FX] = FY; 46 еще 47 { 48 F [FY] = FX; 49 , если (ранг [FX] == ранг [FY]) ранг [FX] ++ ; 50 } 51 } 52 BOOL же ( INT х, INT у) 53 { 54 возврата находка (х) == найти (у); 55 } 56 INT основных () 57 { 58 // freopen ( "input.txt", "г", стандартный ввод); 59 // freopen ( "output.txt", "ш", стандартный вывод); 60 СТД :: ИОС :: sync_with_stdio ( ложные ); 61 т = следующим образом (); 62 INT CNT = 0 ; 63 F (тт, 1 , т) 64 { 65 п = следующим образом (), т = следующим образом (); 66 инициализации (); 67 INT A, B; 68 F (я, 1 , м) 69 { 70 а = следующим образом (), Ь = следующим образом (); 71 , если ( то же самое (а, б) || же (а + п, б + п)) флаг = 1 ; 72 еще 73 { 74 Союз (А, В + п); 75 объединение (+ п-А, В); // (а, б) в другой набор среди 76 } 77 } 78 PF ( " Сценарий #% D: \ n- " , TT), 79 IF (In Flag) PF ( " обнаружили подозрительные ошибки \ n-! " ); 80 в еще PF ( " нет ошибок не обнаружено подозрительное \ n-! " ); 81 PF ( " \ п " ); 82 } 83 }