結果
| 問題 | No.1293 2種類の道路 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2021-02-16 11:08:48 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                RE
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,140 bytes | 
| コンパイル時間 | 370 ms | 
| コンパイル使用メモリ | 82,356 KB | 
| 実行使用メモリ | 98,428 KB | 
| 最終ジャッジ日時 | 2024-07-26 21:19:27 | 
| 合計ジャッジ時間 | 5,017 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | RE * 2 | 
| other | RE * 22 | 
ソースコード
def main1(n,d,w,uv,st):
  gw=[[] for _ in range(n)]
  ufd=UnionFind(n)
  for u,v in uv:
    u,v=u-1,v-1
    ufd.union(v,u)
  ufw=UnionFind(n)
  for s,t in st:
    s,t=s-1,t-1
    gw[s].append(t)
    gw[t].append(s)
    ufw.union(s,t)
  ret=0
  mbd=ufd.members()
  mbw=ufw.members()
  #print(mbd,mbw)
  # 自動車用道路連結成分
  w_only=set()
  for p in mbd:
    mem=mbd[p]
    if len(mem)==1:
      w_only.add(p)
      continue
    num1=len(mem)
    w=set()
    for v in mem:
      for nv in gw[v]:
        w=w|mbw[ufw.find(nv)]
    num2=len(w|mem)
    ret+=num1*(num2-1)
  # 歩行者用道路連結成分
  while w_only:
    wi=w_only.pop()
    p=ufw.find(wi)
    m=mbw[p]
    if len(m)==1:continue
    num1=0
    for mi in m:
      if mi==wi:
        num1+=1
      elif mi in w_only:
        num1+=1
        w_only.discard(mi)
    num2=len(m)
    ret+=num1*(num2-1)
  return ret
import sys
input=sys.stdin.readline
if __name__=='__main__':
  n,d,w=map(int,input().split())
  uv=[list(map(int,input().split())) for _ in range(d)]
  st=[list(map(int,input().split())) for _ in range(w)]
  ret1=main1(n,d,w,uv,st)
  print(ret1)
            
            
            
        