luogu-dev / cyaron

CYaRon: Yet Another Random Olympic-iNformatics test data generator
GNU Lesser General Public License v3.0
1.32k stars 164 forks source link

Graph is not connected. #35

Closed fstqwq closed 5 years ago

fstqwq commented 6 years ago

When I use cyaron to generate data for problem "Castle" in 2018 luogu tg winter camp, when arguments satisfies m >= n - 1, it outputed 3 unconnected graphs. Follwing is generator:

from cyaron import *
from math import *
def is_prime(x):
    s = int(math.sqrt(x)) + 1

    for i in range(2, s):
        if x % i == 0:
            return False
    return True

def wc():
    if randint(1, 10) < 3:
        return randint(0, 2000)
    else:
        return randint(2001, 10000)

n_ = [0]

for i in range(2, 100):
    if is_prime(i):
        n_.append(i)

for i in range(1, 26):
    test_data = IO(file_prefix="castle", data_id=i)
    n = n_[i];
    if i >= 9 and i <= 10:
        m = n - 1
    elif i >= 17 and i <= 20:
        m = n - 1
    elif i == 1:
        m = n - 1
    elif i % 2 == 0:
        m = randint(n, min(int(50. / i * n), n * (n - 1) / 2))
    else:
        m = randint(min(20 * n, n * (n - 1) / 2), n * (n - 1) / 2)
    test_data.input_writeln(n, m)
    print n, m
    if m == n - 1:
        graph = Graph.tree(n, 0.25, 0.25)
    else:
        graph = Graph.graph(n, m, self_loop=False, repeated_edges=False, weight_gen=wc)
    for edge in graph.iterate_edges():
        if edge.start > edge.end:
            swap(edge.start, edge.end)
    test_data.input_writeln(graph)
    test_data.output_gen(".\castle.exe")
WAAutoMaton commented 6 years ago

看了下文档和源码里的注释,都没有“保证图联通”的描述(从源码来看生成算法确实不是生成连通图的算法),不知是疏忽还是Graph.graph本身设计就不是连通图? 如果是Graph.graph设计就是非联通图的话,是否需要添加一个生成连通图的方法?

kkksc03 commented 5 years ago

已经有用户贡献了pr