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的情况要怎么处理呢?把每个连通块单独分析,如果一个连通块有一个合法方案,反过来又是一个合法方案,所以一个连通块要么没有贡献,要么就是2,我们只需要把有贡献的连通块的个数cnt求出来,答案就是C(k,2)*2^cnt.一旦有一个连通块没有合法方案,那么答案就直接为0了.
二分图方案数要一个一个连通块考虑,求方案数如果不用dp先写出式子,然后分析.如果模数非常奇怪,找找看有没有什么规律.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath> using namespace std; int T,n,m,k,head[],nextt[],to[],tot = ;
int col[],ans;
bool flag = false; void add(int x,int y)
{
to[tot] = y;
nextt[tot] = head[x];
head[x] = tot++;
} int qpow(int a,int b)
{
int res = ;
while (b)
{
if (b & )
res = (res * a) % ;
b >>= ;
a = (a * a) % ;
}
return res;
} void dfs(int x,int c)
{
col[x] = c;
for (int i = head[x];i;i = nextt[i])
{
int v = to[i];
if (col[v])
{
if (col[v] == col[x])
{
flag = ;
break;
}
}
else
dfs(v, - c);
}
} int main()
{
scanf("%d",&T);
while (T--)
{
memset(head,,sizeof(head));
memset(col,,sizeof(col));
ans = ;
tot = ;
flag = ;
scanf("%d%d%d",&n,&m,&k);
if (m == )
printf("%d\n",qpow(k,n));
else
{
for (int i = ; i <= m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for (int i = ; i <= n; i++)
{
if (!col[i])
{
dfs(i,);
if (flag)
{
ans = ;
break;
}
ans *= ;
ans %= ;
}
}
printf("%d\n",((((k - ) * k / )% ) * ans) % );
}
} return ;
}
Uoj308【UNR #2】UOJ拯救计划的更多相关文章
- [UOJ UNR#2 UOJ拯救计划]
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 感觉这题有点神... 模数是6比较奇怪,考虑计算答案的式子. Ans=$\sum_{i=1}^{k} P(k,i)*ans(i)$ a ...
- 【UOJ#308】【UNR#2】UOJ拯救计划
[UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2 ...
- uoj308 【UNR #2】UOJ拯救计划
传送门:http://uoj.ac/problem/308 [题解] 考虑枚举用了$i$所学校,那么贡献为${k \choose i} * cnt * i!$ 意思是从$k$所选$i$所出来染色,$c ...
- 【UNR #2】UOJ拯救计划
UOJ小清新题表 题目内容 UOJ链接 题面太长了(其实是我懒得改LaTeX了) 一句话题意: 给出 \(n\) 个点和 \(m\) 条边,对其进行染色,共 \(k\) 种颜色,要求同一条边两点颜色不 ...
- A. 【UNR #2】UOJ拯救计划
题解: 感觉多了解一些npc问题是很有用的.. 就不会像我一样完全不考虑模数的性质 前面60分大概是送分 后面主要考虑一下%6带来的影响 平常都是那么大的模数,突然这么小??? 考虑正好使用k种颜色的 ...
- 2018.10.25 uoj#308. 【UNR #2】UOJ拯救计划(排列组合)
传送门 有一个显然的式子:Ans=∑A(n,i)∗用i种颜色的方案数Ans=\sum A(n,i)*用i种颜色的方案数Ans=∑A(n,i)∗用i种颜色的方案数 这个东西貌似是个NPCNPCNPC. ...
- uoj#308. 【UNR #2】UOJ拯救计划(并查集)
传送门 如果把答案写出来,就是\(\sum_{i=1}^ki!\times {k\choose i}\times f_i\),其中\(f_i\)为选\(i\)种颜色方案 发现如果\(i\geq 3\) ...
- UOJ #460 新年的拯救计划
清真的构造题 UOJ# 460 题意 求将$ n$个点的完全图划分成最多的生成树的数量,并输出一种构造方案 题解 首先一棵生成树有$ n-1$条边,而原完全图只有$\frac{n·(n-1)}{2}$ ...
- UOJ#460. 新年的拯救计划 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ460.html 题解 本题的构造方法很多.这里只介绍一种. 首先,总边数为 $\frac{n(n-1)}2 ...
随机推荐
- Maven私库
<server> <id>releases</id> <username>admin</username> <password> ...
- 3星|《科技投资新时代》:TMT行业资讯汇编
科技投资新时代:TMT投资方法.趋势与热点聚焦 全书共6章,前4章是一些投资与分析的基本方法与技巧,第5章集中讲通信行业的现状与趋势,第6章讲大数据.物联网.全面屏等TMT行业热点. 总体来说数据.信 ...
- Windows操作系统C盘占用空间过多
Windows操作系统C盘占用空间过多 大部分的windows电脑用户在长时间使用PC时都会遇到一个问题,就是C盘占用的空间会越来越多,乃至占满整个C盘. 后来在百度了一波,发现各种方法都试过了,也不 ...
- ArcFace Demo [Android]
Free SDK demo 工程如何使用? 1.下载代码:git clone https://github.com/asdfqwrasdf/ArcFaceDemo.git 或者直接下载压缩包 2.前往 ...
- Logistic回归 逻辑回归 练习——以2018建模校赛为数据源
把上次建模校赛一个根据三围将女性分为四类(苹果型.梨形.报纸型.沙漏)的问题用逻辑回归实现了,包括从excel读取数据等一系列操作. Excel的格式如下:假设有r列,则前r-1列为数据,最后一列为类 ...
- vmvare fusion 8
http://jingyan.baidu.com/article/54b6b9c0f8830f2d583b47ce.html 补充:vmware tools 在上面,直接点击安装
- OOP 学习笔记汇总
1.1 引用 1.2 const关键字 1.3 动态内存分配 1.4 内联函数和重载函数函数参数缺省值 1.5 类和对象的基本概念与用法1 2.1 类和对象的基本概念2
- 阅读笔记《我是一只IT小小鸟》
我是一只IT小小鸟 我们在尝试新的事物的时候,总是会遇到各种各样的困难,不同的人会在碰壁不同的次数之后退出.用程序员喜欢的话来说就是,我们都在for循环,区别在于你是什么情况下break;的.有的人退 ...
- 处理了一个以前写的java小程序的异常
之前用java做过0-99的数字和英文之间的翻译,输入数字就会翻译成英文,输入英文会翻译成数字,比如输入56 输出fiftysix 输入fiftysix 输出56, 发现这会有一个异常,当输入 ...
- lintcode-391-数飞机
391-数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 注意事项 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架 ...