【UNR #2】UOJ拯救计划
UOJ小清新题表
题目内容
题面太长了(其实是我懒得改LaTeX了)
一句话题意:
给出 \(n\) 个点和 \(m\) 条边,对其进行染色,共 \(k\) 种颜色,要求同一条边两点颜色不同,输出方案数\(\pmod 6\)
数据范围
\(1\leq n\leq 10^5,0\leq m\leq 2\times 10^5,1\leq k\leq 10^4\)
思路
水题解,他不香吗
由于本人并不会UOJ中的其他题,所以来水最简单的一道了
直接计算的话,答案为:
\]
其中\(x\)为用\(i\)种颜色的方案数,不过你可能惊喜的发现这个是个\(NPC\)问题。
所以为什么我要在一句话题意中把\(\text{mod}\ 6\)写上呢,因为当\(i\geq 3\)的时候,答案肯定为0。
所以好像只需要讨论\(i=1,2\)即可。
- \(i=1\)
- 若\(m=0\),直接是一堆点,\(ans=1\)。
- 若\(m\not=0\),那么只能\(ans=0\)。
- \(i=2\)
- 若\(m=0\),对于\(n\)个点都有\(2\)种颜色可选,\(ans=k^2\)。
- 若\(m\not=0\),设图中共有\(tot\)个联通块,\(ans=C^2_k\times 2^{tot}\)。当然如果发现有一个联通块无法完成染色,答案就直接是\(0\)。
然后其实\(m=0\)的时候直接答案就是\(k^n\)就行。
代码
#include <bits/stdc++.h>
#define int long long
#define Clean(a) memset(a,0,sizeof(a))
using namespace std;
const int maxn=5e5+10;
const int Mod=6;
int n,m,k;
int vis[maxn];
struct Edge{
int from,to,w,nxt;
}e[maxn<<1];
inline int read(){
int x=0,fopt=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')fopt=-1;
ch=getchar();
}
while(isdigit(ch)){
x=(x<<3)+(x<<1)+ch-48;
ch=getchar();
}
return x*fopt;
}
int head[maxn],cnt;
inline void add(int u,int v){
e[++cnt].from=u;
e[cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt;
}
inline int qpow(int x,int b){
int ans=1,base=x;
while(b){
if(b&1)ans=ans*base%Mod;
base=base*base%Mod;
b>>=1;
}
return ans;
}
bool dfs(int u,int col){
vis[u]=col;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(!vis[v]){
if(!dfs(v,-col))return 0;
}else if(vis[u]==vis[v])return 0;
}
return 1;
}
inline void Init(){
cnt=0;
Clean(e);
Clean(head);
Clean(vis);
}
signed main(){
int T=read();
while(T--){
n=read();m=read();k=read();
if(m==0){
printf("%lld\n",qpow(k,n));
continue;
}else{
if(k==1){
for(int i=1;i<=m;i++){
read();read();
}
puts("0");
continue;
}else{
Init();
for(int i=1;i<=m;i++){
int u=read(),v=read();
add(u,v);add(v,u);
}
int tot=0,flag=1;
for(int i=1;i<=n;i++){
if(!vis[i]){
if(dfs(i,1))tot++;
else{
flag=0;break;
}
}
}
printf("%lld\n",(k*(k-1)/2)%Mod*qpow(2,tot)*flag%Mod);
}
}
}
return 0;
}
【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 ...
- 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. ...
- Uoj308【UNR #2】UOJ拯救计划
分析:比较难分析的一道题,先把式子写出来,ans=∑C(k,i)*f(i),f(i)是选i个颜色的方案数.这个模数有点奇怪,比较小而且是合数,说不定就会有某种规律,如果i >= 3,可以发现C( ...
- 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 ...
随机推荐
- robotframework运行时后台报错UnicodeDecodeError,无日志输出
解决办法: 1.找到对应位置的testrunner.py文件,修改字符集为GBK 2.删除同级目录下的testrunner.pyc 3.重启ride
- lua数据结构之table的内部实现
一.table结构 1.Table结构体 首先了解一下table结构的组成结构,table是存放在GCObject里的.结构如下: typedef struct Table { CommonH ...
- Robotframework自动化6-基础关键字介绍3
这一章节介绍一下断言时用到的关键字,断言是写测试用例的必备,没有断言的测试用例是没有灵魂的. 一:Should Be Equal Should Be Equal 是用来判断实践结果和预期结果是否一致 ...
- Swift入门
Swift 入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者工 ...
- @RestController和@Controller区别
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewRe ...
- 从CPU缓存看缓存的套路
一.前言 不同存储技术的访问时间差异很大,从 计算机层次结构 可知,通常情况下,从高层往底层走,存储设备变得更慢.更便宜同时体积也会更大,CPU 和内存之间的速度存在着巨大的差异,此时就会想到计算机科 ...
- UCanCode发布升级E-Form++可视化源码组件库2020全新版 !
2020年. 中国.成都 UCanCode发布升级E-Form++可视化源码组件库2020全新版 ! --- 全面性能提升,UCanCode有史以来最强大的版本发布! E-Form++可视化源码组件库 ...
- Spring Eureka 本地Docker集群部署
故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...
- C++实现职工管理系统(下)
C++实现职工管理系统(下) 大家好,今天是在博客园的第十五天,博主今天给大家带来的是职工管理系统(C++)(下) 这次的随笔记录是实现(中)结语处说的几个功能,另外新增一个修改功能 此次要实现的功能 ...
- jpa基本常识
1.hibernate更新表结构配置 jpa hibernate框架配置 spring.jpa.properties.hibernate.hbm2ddl.auto = create-drop 其意思是 ...