并查集的模板题,为了避免麻烦,合并的时候根节点大的合并到小的结点。
#include
#include
using namespace std;
const int maxn = 33333;
int fa[maxn];
int num[maxn];
int n,m,t;
void init(){
for(int i = 0; i < n; i++) {fa[i] = i; num[i]...
分类:
其他好文 时间:
2014-10-30 19:12:58
阅读次数:
222
题目来源:http://poj.org/problem?id=1611
The Suspects
Time Limit: 1000MS
Memory Limit: 20000K
Total Submissions: 22834
Accepted: 11102
Description
Severe acute...
分类:
其他好文 时间:
2014-09-09 18:18:59
阅读次数:
219
题目链接:uva 1076 - Password Suspects
题目大意:有一个长度为n的密码,存在m个子串,问说有多少种字符串满足,如果满足个数不大于42,按照字典序输出。
解题思路:根据子串构建AC自动机,然后记忆化搜索,dp[i][u][s]表示第i个字符,在u节点,匹配s个子串。
#include
#include
#include
#include
#inclu...
分类:
其他好文 时间:
2014-09-05 23:54:12
阅读次数:
362
给出n个犯人的n条供述,并且知道有m条是真的
正数代表当前犯人供述该号犯人犯罪
负数代表当前犯人供述该号犯人没有犯罪
例如
+7代表当前犯人供述7号犯罪
-3代表当前犯人供述3号没有犯罪
来想想某人可能犯罪的条件
假设一个人犯罪
那么如果
说其他人犯罪的供述(暂时视作假话)条数+说他没有犯罪的供述(暂时视作假话)条数=n-m(假话条数)
这个式子成立的话
那么这个人就有...
分类:
其他好文 时间:
2014-08-28 19:52:27
阅读次数:
157
第一道并查集,听起来很高大上的样子,其实也不难理解我感觉并查集的精髓就在那个路径压缩上面,将叶子节点直接指向根并:将两个集合合并在一起查:查询某个元素是否在该集合中题意:已知0号同学染病了,那么和他同在一个集合的同学也都可能染病了,输出可能染病的总人数标准的并查集,模板题 1 //#define L...
分类:
其他好文 时间:
2014-08-23 22:51:41
阅读次数:
253
UVA 1076 - Password Suspects
题目链接
题意:一个密码,给定m个已知子串,求这个密码最多有几种表示方式,如果小于42种,就输出这些密码
思路:先利用已有子串构造AC自动机,需要改造一下的地方是每个叶子结点为(1
代码:
#include
#include
#include
#include
#include
#include
u...
分类:
其他好文 时间:
2014-08-22 17:58:29
阅读次数:
282
开始用的是分离
#include
#include
#include
#include
#include
#include
#define PI acos(-1,0)
using namespace std;
const int maxn = 30010;
const int maxm = 100001;
#define lson left, m, id<<1
#define...
分类:
其他好文 时间:
2014-08-15 19:39:19
阅读次数:
212
思路:直接用并查集,最后找到 0 所在的集合,把 集合中的 人数 输出即可#includeusing namespace std;const int maxn=30000 +100;int set[maxn];int sum[maxn];int set_find(int d){ if(set[d]>...
分类:
其他好文 时间:
2014-08-13 13:00:06
阅读次数:
169
The Suspects
Time Limit: 1000MS
Memory Limit: 20000K
Total Submissions: 22217
Accepted: 10805
Description
Severe acute respiratory syndrome (SARS), an atypical pneumo...
分类:
其他好文 时间:
2014-08-03 12:49:25
阅读次数:
215