結果
| 問題 |
No.1420 国勢調査 (Easy)
|
| コンテスト | |
| ユーザー |
logx
|
| 提出日時 | 2021-01-29 23:15:30 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 981 ms / 2,000 ms |
| コード長 | 1,018 bytes |
| コンパイル時間 | 161 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 15,872 KB |
| 最終ジャッジ日時 | 2024-06-27 09:43:51 |
| 合計ジャッジ時間 | 21,191 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
n,m=map(int,input().split())
par=[-1] * n
diff=[0] * n
def find(x):
if par[x]<0:
return x
r=find(par[x])
diff[x]^=diff[par[x]]
par[x]=r
return r
def weight(x):
find(x)
return diff[x]
def diff_query(x,y):
return weight(x)^weight(y)
def same(x,y):
return find(x)==find(y)
def unite(x,y,w):
if(same(x,y)):
if diff_query(x,y)!=w:
return False
else:
return True
w=(w^weight(x))^weight(y)
x=find(x)
y=find(y)
if par[x]>par[y]:
x,y = y,x
t=par[x]+par[y]
par[x]=t
par[y]=x
diff[y]=w
return True
ok=True
for _ in range(m):
a,b=map(int,input().split())
y=int(input())
if unite(a-1,b-1,y)==False:
ok=False
if ok==False:
print(-1)
exit(0)
for i in range(n):
r=find(i)
print(diff_query(i,r))
logx