#P4892. GodFly的寻宝之旅

    ID: 3815 远端评测题 3000ms 500MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>枚举,暴力状态压缩,状压位运算,按位

GodFly的寻宝之旅

题目背景

“蒹葭苍苍,白露为霜。所谓伊人,在水一方…”

怀着aa burningburning desiredesireGodFlyGodFly开启了他追寻学妹之路。

题目描述

我们把校园抽象成一个具有nn个点的无向连通图,其中的nn个结点分别编号为1,2,3,...,n1,2,3,...,n。把GodFlyGodFly经过的结点表示为一个路径集合A={a1,a2,a3,...,am}A=\left\{a_1,a_2,a_3,...,a_m\right\},表示他依次经过了编号为a1a_1a2a_2、…、ama_m的结点,由于集合的元素具有互异性,这意味着GodFlyGodFly无法重复经过同一个结点。

GodFlyGodFly现在要从第11个结点走到第nn个结点,然而他的腿疾对他造成了许多不便。定义GodFlyGodFly经过了mm个结点,当前在点ama_m,且路径集合A={a1,a2,a3...,am1}A=\left\{a_1,a_2,a_3...,a_{m-1}\right\}(加入新结点ama_m前)时,他的总体力耗费为wm=(wm1+amsum(A))w_m=(w_{m-1}+a_m*sum(A))%22,其中wm1w_{m-1}表示上一个路径集合的体力耗费;且对于集合AAsum(A)=a1+a2+...+am1sum(A)=a_1+a_2+...+a_{m-1}

对于w=0w=0的情况,我们称GodFlyGodFly处于“滑基态”,否则对于w=1w=1的情况,我们称GodFlyGodFly处于“对偶态”。现在GodFlyGodFly想要知道,他走到nn结点后处于滑基态或对偶态的方案数,由于这个数可能很大,你只需要输出它对1926081719260817取膜(模)的结果;注意两个方案是不同的,当且仅当它们有至少一条经过的边不同,而非路径集合不同。

注意:T3压缩包内第一个数据有误,以题面的样例为准。

输入格式

第一行,两个数nnkk,分别表示点数和边数;

接下来kk行,每行两个数uuvv,表示结点uu与结点vv之间有一条边。

输入的最后一行为一个数ccc=0c=0表示求滑基态方案数,c=1c=1表示求对偶态方案数。

输出格式

一行,一个数表示方案数,详见题面。

3 3
1 2
2 3
1 3
1
2

提示

【数据范围】

对于3030%的数据,n<=10n<=10k<=45k<=45,无重边及自环;

对于6060%的数据,n<=15n<=15k<=300k<=300

对于8080%的数据,n<=15n<=15k<=100000k<=100000

对于100100%的数据,n<=18n<=18k<=100000k<=100000

样例数据在**data.zip\fantasy**中。

【样例说明】

如图,初始时在11结点,路径集合为{1}\left\{1\right\},费用为00

若从11走到22结点再走到33结点,到22结点时,费用为(0+2sum({1}))(0+2*sum(\left\{1\right\}))%2=212=2*1%2=02=0,并把22加入路径集合,则此时路径集合为{1,2}\left\{1,2\right\};到33结点时,因上一次费用为0,费用为(0+3sum({1,2}))(0+3*sum(\left\{1,2\right\}))%2=3(1+2)2=3*(1+2)%2=12=1

若从11结点直接走到33结点,则费用为(0+3sum({1}))(0+3*sum(\left\{1\right\}))%2=312=3*1%2=12=1

故最终走到33结点时费用为11的方案数为22

【提示】

本题时限3s3s,且可以开启O2O_2优化,不必过分担心卡常数,但请确保算法足够优美。