[UOJ UNR#2 UOJ拯救计划]

来自FallDream的博客,未经允许,请勿转载,谢谢。



传送门

感觉这题有点神...

模数是6比较奇怪,考虑计算答案的式子。

Ans=$\sum_{i=1}^{k} P(k,i)*ans(i)$ ans(i)表示恰好用i种颜色的方案数。

发现i<=2时候才有贡献

i=1的时候,只有m=0才有贡献,否则没有

i=2的时候,判断图是否是二分图,是的话答案就是2^(联通块个数)

#include<iostream>
#include<cstring>
#include<cstdio>
#define MN 100000
using namespace std;
inline int read()
{
    int x=0;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘) ch=getchar();
    while(ch>=‘0‘&&ch<=‘9‘)x=x*10+ch-‘0‘,ch=getchar();
    return x;
}
int sum;
inline int pow(int x,int k)
{
    for(sum=1;k;k>>=1,x=1LL*x*x%6)
        if(k&1) sum=1LL*sum*x%6;
    return sum;
}
int head[MN+5],vis[MN+5],cas,cnt,n,m,k,ans,col[MN+5];
struct edge{int to,next;}e[MN*4+5];

inline void ins(int f,int t)
{
    e[++cnt]=(edge){t,head[f]};head[f]=cnt;
    e[++cnt]=(edge){f,head[t]};head[t]=cnt;
}

void Solve(int x)
{
    vis[x]=cas;
    for(int i=head[x];i;i=e[i].next)
        if(vis[e[i].to]!=cas) col[e[i].to]=col[x]^1,Solve(e[i].to);
        else if(col[e[i].to]==col[x]) ans=0;
}

int main()
{
    for(cas=read();cas;--cas)
    {
        n=read();m=read();k=read();
        memset(head,0,sizeof(head));cnt=0;ans=1;
        for(int i=1;i<=m;++i) ins(read(),read());
        if(!m) {printf("%d\n",pow(k,n));continue;}
        if(k==1||k%3!=2) {puts("0");continue;}
        for(int i=1;i<=n;++i) if(vis[i]!=cas) col[i]=0,Solve(i),ans=ans*2%6;
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-13 08:56:27

[UOJ UNR#2 UOJ拯救计划]的相关文章

UOJ#460. 新年的拯救计划 构造

原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ460.html 题解 本题的构造方法很多.这里只介绍一种. 首先,总边数为 $\frac{n(n-1)}2$,每一棵树需要 $2(n-1)$ 条边,所以答案最多是 $\lfloor \frac n 2 \rfloor$ . 然后我们来找到构造出 $\lfloor \frac n 2 \rfloor$ . 这里我们只考虑 n 为偶数,因为如果 n 为奇数的话就只要在 n-1 的基础上随便连就好了. 考虑增

【UOJ#308】【UNR#2】UOJ拯救计划

[UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2*3\),所以我们只需要考虑其模\(2\)和模\(3\)的结果了. 而最终答案的贡献是\(\sum_{i=1}^k A_{k}^i f[i]\),当\(i\ge 3\)的时候\(6|A_k^i\),所以我们只需要知道\(f[0],f[1],f[2]\)的值. \(f[0]\)的值?当然是\(0\)啊

uoj308 【UNR #2】UOJ拯救计划

传送门:http://uoj.ac/problem/308 [题解] 考虑枚举用了$i$所学校,那么贡献为${k \choose i} * cnt * i!$ 意思是从$k$所选$i$所出来染色,$cnt$为固定颜色顺序的染色方案,$i!$为可以交换学校位置. 考虑当$i \geq 3$的时候,贡献含有模数因子6,所以模6为0,相当于没有贡献. 当$i = 1$,显然只有$m = 0$有贡献. 对于$m = 0$我们特判,答案显然是$K^n$. 剩下$i = 2$的情况,也就是我们要判断答案是不

Uoj308【UNR #2】UOJ拯救计划

分析:比较难分析的一道题,先把式子写出来,ans=∑C(k,i)*f(i),f(i)是选i个颜色的方案数.这个模数有点奇怪,比较小而且是合数,说不定就会有某种规律,如果i >= 3,可以发现C(k,i)一定是被6整除的,那么我们只需要考虑i=2和i=1的情况,i=1的情况比较好处理,这种情况下,m只有等于0,答案为k^n,然后可以发现,这不仅仅是对i=1的情况的分析,所以我们要先特判m=0. 那么i=2的情况要怎么处理呢?把每个连通块单独分析,如果一个连通块有一个合法方案,反过来又是一个合法方案

洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓

题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为,并保证所有的长度都是非负整数(即:可能存在长度为0的蚯蚓). 每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只(如有多个则任选一个)将其切成两半.神刀手切开蚯蚓的位置由常数p(是满足0<p<1的有理数)决定,设这只蚯蚓长度为x,神刀手会将其切成两只长度

浴谷夏令营题单

这是群里一位神犇整理的,我只负责将它们做完. 一.暴力.搜索Luogu 1588 丢失的牛Luogu 1463 [SDOI2005]反素数antBzoj 1085 [SCOI2005]骑士精神Luogu 1019 单词接龙Luogu 1078 文化之旅Luogu 1312 Mayan游戏Luogu 3823 蚯蚓排队Codeforces 444B Codeforces 555DLuogu 1979 华容道 二.初等数论Poj 3292 H合成数Luogu 1890 gcd区间Luogu 1029

省选前的做题记录(Round2)

[CF1109B] Sasha and One More Name 先把无解情况aaabaaa.aaaaaa判掉,然后我们可以证明答案不会超过2. 对于一个回文串,两个指针从两端向内移动直到字符发生变化,在这里看一刀然后交换左右两端即为一种合法方案. 所以我们只需要判断答案是否能为\(1\),暴力判即可. [CF1109C] Sasha and a Patient Friend 假设我们有一个序列数据结构,那么先考虑每个结点需要维护哪些值才能支持合并左右儿子. 维护: 当前点时刻\(time\)

中国股市十大传奇人物

 中国股市十大传奇人物一 中国证券教父管金生 滚滚大盘无定数,涨跌淘尽英雄,成败输赢转头空,股市依旧在,几度夕阳红.不能否认,每一个人,就是一部历史.盘点中国股市的草莽英雄,尽管终归平淡,但他们无一不让管理层焦头烂额,管金生.阚治东.张国庆--. 曾经,国内最大.战无不胜的万国证券,一日而亡,震惊中外,以至于英国<金融时报>称1995年2月23日此一天为"中国证券史上最黑暗的一天". 为此,从本期开始,我将带你去缅怀这些"英雄",尽管时代变迁,但市场却还

培训项目寻合作。数据安全与救援培训中心诚征合作方

数据安全,拯救计划!-----合作  共赢 当今世界是个物欲横飞的世界,也是信息爆炸式增长的时代.小小的一份文件,乃至一份草稿都有可能让一个项目功亏一篑.不是几个字真的那么之钱,而是潜在的内容是"致命". 作为国内最有实力的数据恢复中心,北亚数据恢复中心一直致力于中高端数据安全方面的技术实力提升与应急救援的研究.并且取得了实质性的进展.随着公司规模.实力的提升.我们看到频繁的故障案例.每每都是十分痛心.为什么这么说呢?其实在故障发生之前会有许多的信息提示与征兆.都被忽视了,发生故障的第