【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 ...
随机推荐
- cookie和session讲解
1.cookie是什么? 保存在浏览器本地上的一组组键值对 2.session是什么? 保存在服务器上的一组组键值对 3.为什么要有cookie? HTTP是无协议状态,每次请求都是互相独立的,没有办 ...
- Kafka入门(4):深入消费者
摘要 在这一篇文章中,我将向你介绍消费者的一些参数. 这些参数影响了每次poll()请求的数据量,以及等待时间. 在这之后,我将向你介绍Kafka用来保证消费者扩展性以及可用性的设计--消费者组. 在 ...
- [CF664A]Complicated GCD(数论)
题目链接 http://codeforces.com/problemset/problem/664/A 题意 给两个数,找出它们的最大公因子d,使得从a到b之间的数都可以整除d. 题解 结论: 当gc ...
- 关于java数组基础练习题
定义一个int[] a ={4,2,0,-1,-8,23,9}求数组元素的最大值.最小值.平均数.总和.数组的复制.反转 //3.定义一个int[] a ={4,2,0,-1,-8,23,9}求数组元 ...
- 【Flutter 实战】文件系统目录
老孟导读:Flutter 中获取文件路径,我们都知道使用 path_provider,但对其目录对含义不是很清楚,此文介绍 Android.iOS 系统的文件目录,不同场景下建议使用的目录. 不同的平 ...
- Windows下使用Nginx+Tomact做负载均衡
前言 今天,王子与大家闲谈一下如何在Windows下使用Nginx+Tomcat做负载均衡的完整步骤,小伙伴们可以试着自己动手实践一下哦. 另外说明一点,本篇文章是纯实操文章,不涉及太多原理的解读,后 ...
- 分布式系统监视zabbix讲解六之自定义监控项
概述 Zabbix支持许多在多种情况下使用宏.宏是一个变量,由如下特殊语法标识: {MACRO} 根据在上下文中, 宏解析为一个特殊的值. 有效地使用宏可以节省时间,并使Zabbix变地更加高效. 在 ...
- hystrix熔断器之metrics
Metric概述 HystrixCommands和HystrixObservableCommands执行过程中,会产生执行的数据,这些数据对于观察调用的性能表现非常有用. 命令产生数据后,Metric ...
- 微信小程序直播接入
申请开通小程序直播 1.申请小程序直播有以下几个硬性指标: 1. 满足小程序18个开放类目 2. 主体下小程序近半年没有严重违规 3. 小程序近90天内有过支付行为 4. 主体下公众号累计粉丝数大于1 ...
- 谈谈 Java 中的那些“琐”事
一.公平锁&非公平锁 是什么 公平锁:线程按照申请锁的顺序来获取锁:在并发环境中,每个线程都会被加到等待队列中,按照 FIFO 的顺序获取锁. 非公平锁:线程不按照申请锁的顺序来获取锁:一上来 ...