提出 #22018141
ソースコード 拡げる
import sys
from collections import defaultdict, Counter, deque
from itertools import permutations, combinations, product, combinations_with_replacement, groupby, accumulate
import operator
from math import sqrt, gcd, factorial
# from math import isqrt, prod,comb # python3.8用(notpypy)
#from bisect import bisect_left,bisect_right
#from functools import lru_cache,reduce
#from heapq import heappush,heappop,heapify,heappushpop,heapreplace
#import numpy as np
#import networkx as nx
#from networkx.utils import UnionFind
#from numba import njit, b1, i1, i4, i8, f8
#from scipy.sparse import csr_matrix
#from scipy.sparse.csgraph import shortest_path, floyd_warshall, dijkstra, bellman_ford, johnson, NegativeCycleError
# numba例 @njit(i1(i4[:], i8[:, :]),cache=True) 引数i4配列、i8 2次元配列,戻り値i1
def input(): return sys.stdin.readline().rstrip()
def divceil(n, k): return 1+(n-1)//k # n/kの切り上げを返す
def yn(hantei, yes='Yes', no='No'): print(yes if hantei else no)
class UnionFind():
def __init__(self, n):
self.n = n
self.parents = [-1] * n
self.group_num = n
def find(self, x):
if self.parents[x] < 0:
return x
else:
self.parents[x] = self.find(self.parents[x])
return self.parents[x]
def union(self, x, y):
x = self.find(x)
y = self.find(y)
if x == y:
return
self.group_num -= 1
if self.parents[x] > self.parents[y]:
x, y = y, x
self.parents[x] += self.parents[y]
self.parents[y] = x
def size(self, x):
return -self.parents[self.find(x)]
def same(self, x, y):
return self.find(x) == self.find(y)
def members(self, x):
root = self.find(x)
return [i for i in range(self.n) if self.find(i) == root]
def roots(self):
return [i for i, x in enumerate(self.parents) if x < 0]
def group_count(self):
return self.group_num
def all_group_members(self):
self.all_group_member = defaultdict(list)
for i in range(self.n):
self.all_group_member[self.find(i)].append(i)
return self.all_group_member
def __str__(self):
return '\n'.join('{}: {}'.format(r, self.members(r)) for r in self.roots())
def main():
n,m=map(int, input().split())
ab=[list(map(lambda x: int(x)-1, input().split())) for i in range(m)]
ans=0
for bit in product([0,1],repeat=n):#0:赤 1:青か緑
uf=UnionFind(2*n)
for a,b in ab:
if bit[a]==0 and bit[b]==0:
break
elif bit[a]==1 and bit[b]==1:
uf.union(a,b+n)
uf.union(b,a+n)
else:
for i in range(n):
if uf.same(i,i+n):
break
else:
ans+=2**(uf.group_count()//2-(n-sum(bit)))
print(ans)
if __name__ == '__main__':
main()
提出情報
| 提出日時 |
|
| 問題 |
D - RGB Coloring 2 |
| ユーザ |
ansain |
| 言語 |
PyPy3 (7.3.0) |
| 得点 |
400 |
| コード長 |
3053 Byte |
| 結果 |
AC |
| 実行時間 |
682 ms |
| メモリ |
83860 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
400 / 400 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
| All |
few_hen_00.txt, few_hen_01.txt, few_hen_02.txt, few_hen_03.txt, few_hen_04.txt, few_hen_05.txt, few_hen_06.txt, few_hen_07.txt, manual_00.txt, manual_01.txt, manual_02.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, tree_00.txt, tree_01.txt, tree_02.txt, tree_03.txt, tree_04.txt, tree_05.txt, tree_06.txt, tree_07.txt, tree_08.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| few_hen_00.txt |
AC |
377 ms |
71600 KiB |
| few_hen_01.txt |
AC |
333 ms |
71164 KiB |
| few_hen_02.txt |
AC |
357 ms |
71716 KiB |
| few_hen_03.txt |
AC |
309 ms |
69700 KiB |
| few_hen_04.txt |
AC |
303 ms |
69724 KiB |
| few_hen_05.txt |
AC |
341 ms |
71452 KiB |
| few_hen_06.txt |
AC |
343 ms |
69300 KiB |
| few_hen_07.txt |
AC |
354 ms |
69956 KiB |
| manual_00.txt |
AC |
59 ms |
67228 KiB |
| manual_01.txt |
AC |
61 ms |
67168 KiB |
| manual_02.txt |
AC |
62 ms |
67460 KiB |
| random_00.txt |
AC |
641 ms |
83860 KiB |
| random_01.txt |
AC |
552 ms |
75932 KiB |
| random_02.txt |
AC |
456 ms |
75408 KiB |
| random_03.txt |
AC |
517 ms |
74920 KiB |
| random_04.txt |
AC |
537 ms |
74284 KiB |
| random_05.txt |
AC |
546 ms |
77976 KiB |
| random_06.txt |
AC |
597 ms |
80204 KiB |
| random_07.txt |
AC |
667 ms |
81172 KiB |
| random_08.txt |
AC |
593 ms |
79492 KiB |
| random_09.txt |
AC |
682 ms |
78456 KiB |
| random_10.txt |
AC |
558 ms |
77828 KiB |
| random_11.txt |
AC |
574 ms |
79296 KiB |
| random_12.txt |
AC |
69 ms |
68456 KiB |
| random_13.txt |
AC |
102 ms |
70004 KiB |
| random_14.txt |
AC |
59 ms |
67340 KiB |
| random_15.txt |
AC |
303 ms |
75732 KiB |
| random_16.txt |
AC |
90 ms |
68968 KiB |
| random_17.txt |
AC |
59 ms |
67260 KiB |
| random_18.txt |
AC |
89 ms |
68568 KiB |
| random_19.txt |
AC |
446 ms |
79348 KiB |
| random_20.txt |
AC |
535 ms |
76652 KiB |
| random_21.txt |
AC |
466 ms |
76876 KiB |
| random_22.txt |
AC |
68 ms |
68004 KiB |
| random_23.txt |
AC |
223 ms |
73740 KiB |
| sample_01.txt |
AC |
60 ms |
67416 KiB |
| sample_02.txt |
AC |
57 ms |
67324 KiB |
| sample_03.txt |
AC |
59 ms |
67324 KiB |
| sample_04.txt |
AC |
290 ms |
68480 KiB |
| tree_00.txt |
AC |
576 ms |
70108 KiB |
| tree_01.txt |
AC |
402 ms |
71900 KiB |
| tree_02.txt |
AC |
386 ms |
73308 KiB |
| tree_03.txt |
AC |
574 ms |
69604 KiB |
| tree_04.txt |
AC |
360 ms |
71248 KiB |
| tree_05.txt |
AC |
361 ms |
71892 KiB |
| tree_06.txt |
AC |
599 ms |
70024 KiB |
| tree_07.txt |
AC |
376 ms |
72452 KiB |
| tree_08.txt |
AC |
427 ms |
72440 KiB |