hdu1704推移閉包

トピックリンク: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 }

 

おすすめ

転載: www.cnblogs.com/randy-lo/p/12590356.html