题意
如果一个无向图重标号后与另一个无向图完全一致(即对于任意两点,他们之间的边在两个图中都存在或都不存在),则称两个无向图同构。
给定两个n个点m条边的无向图,判定两个无向图是否同构。
n<=200,m<=4000
分析
初始时设每个点为点权为1,之后进行n次迭代,每次迭代每个点的值更替为与其相邻的点和他本身上一次迭代后的权值排序后计算出的hash值。
如果两个无向图同构则n次迭代后,所有权值排序后应该对应相等。
1.如果是两个同构的无向图,则最后算出来的值排序后必定相同。
2.如果是两个不同构的无向图,这张图上的权值相当于是基于这张图的形状而给出的随机值,
两个不同构的无向图上的权值相等的概率只有1/p,p为hash时的取模数,当p取非常大时几乎可以认定两个图同构当且仅当hash值相同。
也可以通过多取几个取模数、增加迭代次数等增加正确率,但此题只需取一个p,迭代n次已经完全足够了。
复杂度O(T*nmlogn)