トピックリンク:http://acm.hdu.edu.cn/showproblem.php?pid=1704
このような関係の最小セットを有するリレーションRにおけるタプル(x、y)の両方の場合の関係集合Rの定義に推移閉包、そこには、タプル(Y、Z)は、タプル(X、Z)であり、推移閉包です。そこに説明されている:推移閉包、即ち、数学において、X上の最小の推移関係Rを含む集合Xの閉鎖に2項関係Rを送信します。Xは、(死んでいるか生きている)で、たとえば、Rは、人間関係「親子」関係のRの推移閉包の集合である「yが祖先であるXが。」別の例として、XがXRY空港と「直行便で空港まで、空港からのx y」の関係、Rの推移閉包があるに設定されている場合は、「おそらくXから1つの以上のナビゲーションフライyで。」
この質問は、私たちは、その後の関係は推移的性質である、Xセット(番号のセット)「勝利」の関係を定義することができます。缶が解決推移閉包をフロイド、転写式の推移閉包である:DIS [I] [J] = DIS [I] [J] |(DIS [I] [K]&DIS [K] [J])、その唯一の小さな点に注意を払うの質問はトリプルループ最適化されています。
コードは以下の通りであります:
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3符号なしのtypedef int型のUI。 4のtypedef 長い 長LL。 5符号なしのtypedef 長い 長いULL。 6 の#define PFのprintf 7 の#define MEM(A、B)のmemset(A、B、はsizeof()) 8 の#define prime1 1E9 + 7 9 の#define prime2 1E9 + 9 10 の#define PI 3.14159265 11 の#define LSON Lを、半ば、室温<< 1 12 の#define rson半ば+ 1、R、RT << 1 | 1 13 の#define scand(X)のscanf( "%のLLF"、&x)は 14 の#define F(I、B)のための(INT iは=; I <= B; I ++) 15 の#defineスキャン()のscanf( "%のD"、&) 16 の#define MP(a、b)はmake_pair(()、(B)) 17 の#define P対<整数、整数> 18 の#define DBG(引数)COUT <<#1引数<< ":" <<引数<<てendl; 19 の#define INF 0x7ffffff 20インラインINT リード(){ 21件 のint ANS = 0、W = 1 。 22 CHAR CH = GETCHAR()。 23 中(!(CH == ' - ')W = - 1 ; CH = GETCHAR();} 24 ながら(isdigit(CH))ANS =(ANS << 3)+(ANS << 1)+ CH- ' 0 '、 CH = GETCHAR()。 25の リターン ANSは* wは、 26 } 27 のconst int型 MAXN = 1000年。 28 整数N、M、T。 29件 のint DIS [MAXN] [MAXN]。 30 ボイドフロイド() 31 { 32 F(K、1 、N) 33 F(I、1 、n)の 34 { 35 であれば(DIS [i]が[K]) 36 F(j、1 、N) 37 { 38 DIS [I] [J] = DIS [I] [J] |(DIS [I] [K]&DIS [K] [J])。// 传递闭包 39 } 40 } 41 42 } 43 INT ANS = 0 。 44 のint main()の 45 { 46 // freopenは( "INPUT.TXT"、 "R"、標準入力)。 47は // freopenは( "output.txtと"、 "W"、STDOUT); 48 std ::イオス:: sync_with_stdio(偽); 49 T = ()を読み込みます。 50 一方(t-- ) 51 { 52 MEM(DIS、0 ); 53の ANS = 0 。 54 N =)(読み取り、M = read()は、 55 のint X、Y。 56 一方(M-- ) 57 { 58 、X =(読み取り)Y = read()は、 59の DIS [X] [Y] = 1 。 60 } 61 )(フロイド。 62 F(I、1 、N-) 63である F(J、I + 1 、N-) 64 { 65 IF ANS ++(DIS [I] [J] && DIS [J] [I]!); // (I、J)推論関係勝ち負けされていない間には関連しない、 66 } 67 PF(" %D \ N- " 、ANSを); 68 } 69 }