Submission #180974


Source Code Expand

#!/usr/bin/env python2.7

import sys

from cStringIO import StringIO
from collections import namedtuple

import unittest
import cProfile

class Edge(namedtuple("Edge", "a b")):
    pass

def main():
    N, G, E  = (int(x) for x in sys.stdin.readline().split())
    p = (int(x) for x in sys.stdin.readline().split())
    Es = []
    for _ in xrange(E):
        a, b = [int(x) for x in sys.stdin.readline().split()]
        Es.append(Edge(a, b))

    print solve(N, p, Es)

def genpat(Es):
    N = len(Es)
    for k in xrange(2**N):
        k = format(k, str(N)+'b')
        yield [Es[i] for i in xrange(N) if k[i] == '1']

def solve(N, p, Es):
    if len(Es) > 12:
        return "GIVEUP"
    p = set(p)

    g = { i: list() for i in xrange(N)}
    for e in Es:
        g[e.a].append(e.b)
        g[e.b].append(e.a)

    # filter linked
    fset = set()
    cset = set([0])
    while len(cset) != 0:
        i = cset.pop()
        nset = set(g[i])
        fset.add(i)
        nset -= fset
        cset |= nset
    p &= fset

    best = len(p)
    for subs in genpat(Es):

        L = len(Es) - len(subs)

        g = { i: list() for i in xrange(N)}
        for e in subs:
            g[e.a].append(e.b)
            g[e.b].append(e.a)

        fset = set()
        cset = set([0])
        while len(cset) != 0:
            i = cset.pop()
            nset = set(g[i])
            fset.add(i)
            nset -= fset
            cset |= nset

        L += len(p & fset)
        
        if L < best:
            best = L

    return best
    
class Test(unittest.TestCase):

    @staticmethod
    def tryone(indata):
        sys.stdin = StringIO(indata)
        out = sys.stdout = StringIO()
        main()
        return out.getvalue()

    def test50(self):
        self.assertEqual(solve(4, [2, 3],
                        [Edge(0,1), Edge(1,2), Edge(1,3)]), 1)
        self.assertEqual(solve(4, [3],
                        [Edge(0,1), Edge(0,2), Edge(1,3), Edge(2,3)]), 1)
        self.assertEqual(solve(10, [7, 8, 9],
                        [
                            Edge(0,1), Edge(0,2), Edge(0,3), Edge(0,4),
                            Edge(1,5), Edge(2,5), Edge(5,6), Edge(6,7),
                            Edge(6,8), Edge(3,9), Edge(4,9),
                        ]), 2)

    def test90(self):
        self.assertEqual(self.tryone("""\
4 2 3
2 3
0 1
1 2
1 3
"""), """1\n""")

if __name__ == '__main__':
    if len(sys.argv) > 1:
        print "_/" * 30 + str(sys.argv)
        if sys.argv[1] == '-p':
            sys.argv.pop(1)
            cProfile.run("unittest.main(exit=False, failfast=True)", sort='time')
        else:
            unittest.main()
    else:
        main()

Submission Info

Submission Time
Task D - 浮気予防
User over80
Language Python (2.7.3)
Score 99
Code Size 2804 Byte
Status WA
Exec Time 222 ms
Memory 4980 KB

Judge Result

Set Name part All
Score / Max Score 99 / 99 0 / 1
Status
AC × 27
AC × 32
WA × 24
Set Name Test Cases
part test_01_AB.txt, test_02_AB.txt, test_03_AB.txt, test_04_AB.txt, test_05_AB.txt, test_06_AB.txt, test_07_AB.txt, test_08_AB.txt, test_09_AB.txt, test_10_AB.txt, test_11_AB.txt, test_12_AB.txt, test_13_AB.txt, test_14_AB.txt, test_15_AB.txt, test_16_AB.txt, test_17_AB.txt, test_18_AB.txt, test_19_AB.txt, test_20_AB.txt, test_21_AB.txt, test_22_AB.txt, test_23_AB.txt, test_24_AB.txt, test_25_AB.txt, test_41_AB.txt, test_47_AB.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, test_01_AB.txt, test_02_AB.txt, test_03_AB.txt, test_04_AB.txt, test_05_AB.txt, test_06_AB.txt, test_07_AB.txt, test_08_AB.txt, test_09_AB.txt, test_10_AB.txt, test_11_AB.txt, test_12_AB.txt, test_13_AB.txt, test_14_AB.txt, test_15_AB.txt, test_16_AB.txt, test_17_AB.txt, test_18_AB.txt, test_19_AB.txt, test_20_AB.txt, test_21_AB.txt, test_22_AB.txt, test_23_AB.txt, test_24_AB.txt, test_25_AB.txt, test_26_A.txt, test_27_A.txt, test_28_A.txt, test_29_A.txt, test_30_A.txt, test_31_A.txt, test_32_A.txt, test_33_A.txt, test_34_A.txt, test_35_A.txt, test_36_A.txt, test_37_A.txt, test_38_A.txt, test_39_A.txt, test_40_A.txt, test_41_AB.txt, test_42_A.txt, test_43_A.txt, test_44_A.txt, test_45_A.txt, test_46_A.txt, test_47_AB.txt, test_48_A.txt, test_49_A.txt, test_50_A.txt, test_51_A.txt
Case Name Status Exec Time Memory
sample_01.txt AC 138 ms 4428 KB
sample_02.txt AC 68 ms 4424 KB
sample_03.txt AC 104 ms 4420 KB
sample_04.txt AC 74 ms 4436 KB
sample_05.txt AC 71 ms 4428 KB
test_01_AB.txt AC 68 ms 4436 KB
test_02_AB.txt AC 214 ms 4432 KB
test_03_AB.txt AC 156 ms 4428 KB
test_04_AB.txt AC 158 ms 4408 KB
test_05_AB.txt AC 222 ms 4424 KB
test_06_AB.txt AC 76 ms 4440 KB
test_07_AB.txt AC 78 ms 4428 KB
test_08_AB.txt AC 72 ms 4428 KB
test_09_AB.txt AC 71 ms 4436 KB
test_10_AB.txt AC 67 ms 4428 KB
test_11_AB.txt AC 70 ms 4424 KB
test_12_AB.txt AC 69 ms 4436 KB
test_13_AB.txt AC 117 ms 4436 KB
test_14_AB.txt AC 70 ms 4428 KB
test_15_AB.txt AC 81 ms 4436 KB
test_16_AB.txt AC 71 ms 4432 KB
test_17_AB.txt AC 68 ms 4436 KB
test_18_AB.txt AC 169 ms 4432 KB
test_19_AB.txt AC 87 ms 4428 KB
test_20_AB.txt AC 71 ms 4436 KB
test_21_AB.txt AC 181 ms 4432 KB
test_22_AB.txt AC 71 ms 4412 KB
test_23_AB.txt AC 68 ms 4432 KB
test_24_AB.txt AC 71 ms 4432 KB
test_25_AB.txt AC 68 ms 4432 KB
test_26_A.txt WA 90 ms 4816 KB
test_27_A.txt WA 83 ms 4812 KB
test_28_A.txt WA 87 ms 4816 KB
test_29_A.txt WA 82 ms 4816 KB
test_30_A.txt WA 83 ms 4808 KB
test_31_A.txt WA 88 ms 4980 KB
test_32_A.txt WA 76 ms 4432 KB
test_33_A.txt WA 74 ms 4552 KB
test_34_A.txt WA 71 ms 4428 KB
test_35_A.txt WA 73 ms 4412 KB
test_36_A.txt WA 72 ms 4432 KB
test_37_A.txt WA 74 ms 4436 KB
test_38_A.txt WA 66 ms 4428 KB
test_39_A.txt WA 68 ms 4432 KB
test_40_A.txt WA 68 ms 4432 KB
test_41_AB.txt AC 69 ms 4428 KB
test_42_A.txt WA 77 ms 4560 KB
test_43_A.txt WA 69 ms 4432 KB
test_44_A.txt WA 72 ms 4436 KB
test_45_A.txt WA 67 ms 4424 KB
test_46_A.txt WA 70 ms 4436 KB
test_47_AB.txt AC 70 ms 4428 KB
test_48_A.txt WA 69 ms 4420 KB
test_49_A.txt WA 71 ms 4436 KB
test_50_A.txt WA 71 ms 4424 KB
test_51_A.txt WA 72 ms 4420 KB