传送门

有一个显然的式子:Ans=∑A(n,i)∗用i种颜色的方案数Ans=\sum A(n,i)*用i种颜色的方案数Ans=∑A(n,i)∗用i种颜色的方案数

这个东西貌似是个NPCNPCNPC。

于是需要仔细观察数据范围。

咦模数等于666?

那么对于A(n,i)A(n,i)A(n,i)在i≥3i\geq 3i≥3的时候模666都是000了。

因此只用讨论i=1i=1i=1和i=2i=2i=2的方案数。

什么?

i=1?i=1?i=1?

没错,题目上并没有说过m!=0m!=0m!=0啊。

还有就是貌似边数跟题目描述不太一样。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=1e5+5,M=2e6+5,mod=6;
int T,n,m,K,first[N],cnt=0,tot=0,fa[N],col[N],ans;
struct edge{int v,next;}e[M<<1];
inline void addedge(int u,int v){e[++cnt].v=v,e[cnt].next=first[u],first[u]=cnt;}
inline void add(int u,int v){addedge(u,v),addedge(v,u);}
inline bool dfs(int p,int f){
	col[p]=f;
	for(int i=first[p];i;i=e[i].next){
		int v=e[i].v;
		if(~col[v]){if(!(col[v]^f))return false;}
		else if(!dfs(v,f^1))return false;
	}
	return true;
}
inline int find(int x){return x==fa[x]?fa[x]:fa[x]=find(fa[x]);}
int main(){
	T=read();
	while(T--){
		n=read(),m=read(),K=read();
		if(!m){
			ans=1;
			for(int i=1;i<n;++i){
				ans<<=1;
				if(ans>=mod)ans-=mod;
			}
			--ans;
			if(ans<0)ans+=mod;
			ans=ans*K%mod*(K-1)%mod;
			ans+=K%mod;
			if(ans>=mod)ans-=mod;
		}
		else{
			cnt=0,tot=0,ans=1;
			for(int i=1;i<=n;++i)first[i]=0,fa[i]=i,col[i]=-1;
			for(int i=1,u,v,fx,fy;i<=m;++i){
				u=read(),v=read(),add(u,v),add(v,u),fx=find(u),fy=find(v);
				if(fx!=fy)fa[fx]=fy;
			}
			for(int i=1,f;i<=n;++i)
				if(~col[i])continue;
				else{
					if(!dfs(i,0)){ans=0;break;}
					++tot;
				}
			if(ans){
				for(int i=1;i<tot;++i){
					ans<<=1;
					if(ans>=mod)ans-=mod;
				}
				ans=ans*K%mod*(K-1)%mod;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

2018.10.25 uoj#308. 【UNR #2】UOJ拯救计划(排列组合)的更多相关文章

  1. 2018.10.25 CCSP马拉松摸铜归来

    24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...

  2. 2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)

    传送门 当看到那个k≤8k\le 8k≤8的时候就知道需要状压了. 状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk ...

  3. 课堂笔记及知识点----UI框架简介(2018/10/25)

    UI框架学习目标: 要知道怎样套用的! 框架里面的基本执行流程 怎样开始执行(配置文件) 怎么套用 最主要的三个脚本: (也是多态的体现之一) 1).BaseUI: 作用-->提供UI能够使用的 ...

  4. 2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)

    传送门 有点难调啊.其实是我自己sb了 不过交上去1A1A1A还是平衡了一下心态. 所以这道题怎么做呢? 我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/ ...

  5. 2018.10.25 洛谷P4187 [USACO18JAN]Stamp Painting(计数dp)

    传送门 其实本来想做组合数学的2333. 谁知道是道dpdpdp. 唉只能顺手做了 还是用真难则反的思想. 这题我们倒着考虑,只需要求出不合法方案数就行了. 这个显然是随便dpdpdp的. f[i]f ...

  6. 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)

    传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...

  7. 2018.10.25 atcoder Leftmost Ball(计数dp+组合数学)

    传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> ...

  8. 2018.10.25 uestc上天的卿学姐(计数dp)

    传送门 看了DZYODZYODZYO的题解之后发现自己又sbsbsb了啊. 直接dpdpdp是O(2d)O(2^d)O(2d)更新,O(1)O(1)O(1)查询或者O(1)O(1)O(1)更新,O(2 ...

  9. 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)

    传送门 区间dpdpdp好题. 首先肯定需要把坐标离散化. 然后在数轴上面区间dpdpdp. 对于当前区间,区间中最大的数一定会被选. 于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在i ...

随机推荐

  1. 81. Search in Rotated Sorted Array II (Array; Divide-and-Conquer)

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  2. 189. Rotate Array(Array)

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...

  3. http://www.rabbitmq.com/documentation.html

    http://www.rabbitmq.com/documentation.html https://www.gitbook.com/book/geewu/rabbitmq-quick/details

  4. QT注意事项(持续更新...)

    同样要注意new和delete的问题: is not a member of QApplication:这个错误可能是找不到信号或槽函数: 想用到信号槽,必须至少继承QObject类,并在类第一行写上 ...

  5. UVa 1600 Patrol Robot(三维广搜)

    A robot has to patrol around a rectangular area which is in a form of m x n grid (m rows and ncolumn ...

  6. django的model操作整理

    单表操作 增加数据 auther_obj = {"auther_name":"崔皓然","auther_age":1} models.aut ...

  7. 842. Split Array into Fibonacci Sequence能否把数列返回成斐波那契数列

    [抄题]: Given a string S of digits, such as S = "123456579", we can split it into a Fibonacc ...

  8. 微信小程序 页面跳转navigator与传递参数

    页面之间跳转使用 navigator标签,wx.navigateTo ,wx.redirectTo 1.URL就是跳转的页面路径.上面代码中就是navigator目录下的navigator页面,tit ...

  9. POPUP_TO_CONFIRM的使用方法

    CALL FUNCTION 'POPUP_TO_CONFIRM'       EXPORTING         TEXT_QUESTION               = '是否要打印凭证!'    ...

  10. bootstrap 折叠collapse失效

    手动点击折叠,然后调用折叠全部以后,在手动点击折叠项,折叠失效. 方法,折叠项是通过添加或删除".in"来实现,实现如下 $(".collapse.in").c ...