結果

問題 No.1207 グラフX
ユーザー mlihua09
提出日時 2020-08-30 14:32:57
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,028 ms / 2,000 ms
コード長 1,655 bytes
コンパイル時間 224 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 173,276 KB
最終ジャッジ日時 2024-11-15 07:42:09
合計ジャッジ時間 33,947 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 46
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

N, M, X = map(int, input().split())
XYZ = []
p = 10 ** 9 + 7
class UnionFind:
def __init__(self, N):
self.N = N
self.P = [-1] * N
def Find(self, x):
if self.P[x] < 0:
return x
else:
self.P[x] = self.Find(self.P[x])
return self.P[x]
def query(self, x, y):
x -= 1
y -= 1
x = self.Find(x)
y = self.Find(y)
if x == y:
return False
if self.P[x] > self.P[y]:
x, y = y, x
self.P[x], self.P[y] = self.P[x] + self.P[y], x
return True
G = UnionFind(N)
for i in range(M):
x, y, z = map(int, input().split())
XYZ += [[z, x, y]]
XYZ.sort()
E = []
V1 = [[] for i in range(N)]
for z, x, y in XYZ:
if G.query(x, y):
E += [[x - 1, y - 1, z]]
V1[x - 1] += [y - 1]
V1[y - 1] += [x - 1]
que = [0]
P = [-1] * N
P[0] = 0
V = [[] for i in range(N)]
while que:
q = que.pop()
for v in V1[q]:
if P[v] == -1:
V[q] += [v]
P[v] = q
que += V[q]
A = [1] * N
que = [0]
while que:
q = que.pop()
if V[q]:
que += [V[q].pop()]
else:
if q == 0:
break
A[P[q]] += A[q]
que += [P[q]]
ans = 0
for x, y, z in E:
if P[x] != y:
x, y = y, x
ans += A[x] * (N - A[x]) % p * pow(X, z, p) % p
ans %= p
print(ans)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0