HDU5952 Counting Cliques 暴搜优化】的更多相关文章

一.前言 这题看上去相当唬人(NPC问题),但是 因为限制了一些条件,所以实际上并没有太唬人. 二.题目 给你一个图,要求你找出数量为S的团的数量. 三.题解 暴搜,再加上一些玄学优化. 优化1:使用链表来优化图 优化2:使用mapp[][]来进行标记 优化3:使用inline.define来进行优化 优化4:无向图只从小节点指向大节点,优化边的数量 优化5:初始化时使用精确控制memset字节数 //#include<bits/stdc++.h> #include<stdio.h>…
题目链接:传送门 题目: Counting Cliques Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Submission(s): Problem Description A clique is a complete graph, in which there is an edge between every pair of the vertices.…
题目传送门 题目大意:给出n个点,m条无向边,让你计算这幅母图中有几个大小为s的完全图. 完全图的意思是任意一个点都和其他点直接相连,完全图的大小指的就是完全图点的个数. 思路:比较巧妙的构图方式.我们会很自然地想到用dfs来找环,然后记录路径,判断是否成完全图,但是由于题目给的是双向边,如果直接构图的话,就会导致出现很多没有必要的情况,重复计算,爆栈超时. 所以在建图的时候只建从小的点到大的点的单向边,然后对n个点从小到大进行dfs,这样可以既可以保证不会有遗留的情况,也不会重复计算(因为每次…
题意:一个有N个点M条边的图,球其中由S个点构成的团的个数.一个团是一个完全子图. 没有什么好办法,只有暴力深搜,但是这里有一个神奇的操作:将无向图转为有向图:当两个点编号u<v时才有边u->v,这样的好处是一张完全图只有从最小编号开始深搜的时候才会搜完整张完全图(本来完全图从其中任意一个节点进入都是没有区别的),因为假如v1 < v2,并且v1,v2在同一完全图中,则v2只会走到编号更大的点,这样每张大小为S的完全图只有一条固定的路,所以不会重复.从1~N个点每个点开始dfs,这样即使…
E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/yuanjunlai141/article/details/52972715 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm&…
题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进来的点是否与当前集合中的每个点之间都有边.搜到集合大小为\(s\)就答案+1. 注意 如果不做处理的话,每个完全图都会被搜到\(2^s\)次,其中只有一次是必要的. 因此,一个很显然的常用的考虑是:搜索的时候下一个节点比当前的节点编号大,这样就肯定不会搜重复了. 再稍微转化一下,在建图的时候就可以只…
最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC之后在那死磕性能... 累积交了45份代码,纪念一下- - 以上展示了从1.25s优化到0.03s的艰苦历程... 来看题目吧,就是一个数独求解的题: 1317. Sudoku Constraints Time Limit: 10 secs, Memory Limit: 32 MB Descript…
Mines Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1110    Accepted Submission(s): 280 Problem Description Terrorists put some mines in a crowded square recently. The police evacuate all peo…
题目链接 由于是暴搜题,所以这篇博客只讲怎么优化剪枝,以及一些细节. 模拟消除思路:因为消除可以拆分成小的横条或竖条,而这些条的长度至少为三,所以一块可消除的区域至少会有一个中心点.这里的中心点可以不在正中间,只需要不是条上的第一个或者最后一个. 于是枚举中间点,搜索它为中心最多向四个方向能扩展多远.如果搜索出来的横向满足长度要求,或竖向满足长度要求,就给他们打上一个标记. 注意,这里只是打上标记,不能直接清零,很可能另一个方块的结算还得用到这个方块. 等到枚举所有的中间点并给所有可消除的方块打…
题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广搜,原理其实是很像的,为了省略很多状态的枚举. 如果暴搜的话应该是O(2^n),n<=40,而折半搜的话,理论复杂度是O(2^(n/2)),看到一张图很好地诠释了优化复杂度&&空间的原理 (此为暴搜) (感谢顾哥NET这位大佬的图) 于是,分两次dfs,把答案记录在两个数组里. 问题在于…