top of page

소스 코드 제출

공개·회원 71명

20250717

class Unionfind:

def __init__(self,sz):

self.p=list(range(sz))

self.r=[1]*sz

self.cnt=[1]*sz

def find(self,x):

if x==self.p[x]:

return x

self.p[x]=self.find(self.p[x])

return self.p[x]

def merge(self,u,v):

u=self.find(u)

v=self.find(v)

if u==v:

return

if self.r[u]>self.r[v]:

u,v=v,u

self.p[u]=v

self.cnt[v]+=self.cnt[u]

if self.r[u]==self.r[v]:

self.r[v]+=1

def get(self,u):

u=self.find(u)

return self.cnt[u]

n=int(input())

c=[0]*(n+1)

b=[0]*(n+1)

a=[[] for _ in range(n+1)]

for i in range(1,n+1):

x,y=map(int,input().split())

a[x].append(i*2)

a[y].append(i*2+1)

uf=Unionfind(n+1)

for i in range(1,n+1):

uf.merge(a[i][0]//2,a[i][1]//2)

for i in range(1,n+1):

if a[i][0]%2==0 and a[i][1]%2==0:

ri=uf.find(a[i][0]//2)

c[ri]+=1

for i in range(1,n+1):

ri=uf.find(a[i][0]//2)

if c[ri]>=2:

print('-1')

exit()

s=0

for i in range(1,n+1):

ri=uf.find(a[i][0]//2)

if b[ri]:

continue

b[ri]=1

x=uf.get(ri)

if x>=2:

s+=x+1

print(s)

1회 조회
주소 : 경기도 용인시 광교중앙로 302 블루 스퀘어 602호
연락처 : 031) 216 - 1546 ,     031) 215 - 1546
사업자등록번호 : 465-92-00916
​학원 등록 제 4603호
bottom of page