题目背景
“蒹葭苍苍,白露为霜。所谓伊人,在水一方…”
怀着a burning desire,GodFly开启了他追寻学妹之路。
题目描述
我们把校园抽象成一个具有n个点的无向连通图,其中的n个结点分别编号为1,2,3,...,n。把GodFly经过的结点表示为一个路径集合A={a1,a2,a3,...,am},表示他依次经过了编号为a1、a2、…、am的结点,由于集合的元素具有互异性,这意味着GodFly无法重复经过同一个结点。
GodFly现在要从第1个结点走到第n个结点,然而他的腿疾对他造成了许多不便。定义GodFly经过了m个结点,当前在点am,且路径集合A={a1,a2,a3...,am−1}(加入新结点am前)时,他的总体力耗费为wm=(wm−1+am∗sum(A))%2,其中wm−1表示上一个路径集合的体力耗费;且对于集合A,sum(A)=a1+a2+...+am−1。
对于w=0的情况,我们称GodFly处于“滑基态”,否则对于w=1的情况,我们称GodFly处于“对偶态”。现在GodFly想要知道,他走到n结点后处于滑基态或对偶态的方案数,由于这个数可能很大,你只需要输出它对19260817取膜(模)的结果;注意两个方案是不同的,当且仅当它们有至少一条经过的边不同,而非路径集合不同。
注意:T3压缩包内第一个数据有误,以题面的样例为准。
输入格式
第一行,两个数n,k,分别表示点数和边数;
接下来k行,每行两个数u、v,表示结点u与结点v之间有一条边。
输入的最后一行为一个数c,c=0表示求滑基态方案数,c=1表示求对偶态方案数。
输出格式
一行,一个数表示方案数,详见题面。
3 3
1 2
2 3
1 3
1
2
提示
【数据范围】
对于30%的数据,n<=10,k<=45,无重边及自环;
对于60%的数据,n<=15,k<=300;
对于80%的数据,n<=15,k<=100000;
对于100%的数据,n<=18,k<=100000;
样例数据在**data.zip\fantasy**中。
【样例说明】
如图,初始时在1结点,路径集合为{1},费用为0;
若从1走到2结点再走到3结点,到2结点时,费用为(0+2∗sum({1}))%2=2∗1%2=0,并把2加入路径集合,则此时路径集合为{1,2};到3结点时,因上一次费用为0,费用为(0+3∗sum({1,2}))%2=3∗(1+2)%2=1;
若从1结点直接走到3结点,则费用为(0+3∗sum({1}))%2=3∗1%2=1。
故最终走到3结点时费用为1的方案数为2。
【提示】
本题时限3s,且可以开启O2优化,不必过分担心卡常数,但请确保算法足够优美。