loj 1009(dfs)】的更多相关文章

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25835 思路:对每一个连通块将其染色,然后取颜色相同的最多的点,最后全部加起来即可. PS:一开始没考虑到有可能有些点不出现,WA了好多次,然后改成将出现的点标记即可. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #incl…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1426 思路:首先我们预处理出每一个"*"在某一方向上最终能到达的位置,这里我们可以用一个四维数组来记录next[i][j][k][2],然后首先判断"impossible"这种情况,我们可以对每个"*"进行dfs,看是否能够到达边界,如果存在某个“*”不能到达边界,那么直接就是"impossible“了.判断好这个之后就可以…
部分参考自博客:https://blog.csdn.net/hpu2022/article/details/81910490 在许多问题中,由于树结构复杂通常会导致问题很棘手,因为其实非线性结构,操作起来也甚是费时. 例如:对于一棵树,含有n个节点,每个节点拥有相应的权值,我们进行很多个操作,比如可以修改某个节点的权值,查找以某个节点为根节点的子树和. 显然,对于这个问题,每次计算子树权值和时我们都要遍历一下各个节点,而如果我们可以用某种方式把它装化成线性结构,然后再用数组数组或者线段树去更新查…
题意 https://loj.ac/problem/534 思路 又是复杂度错误的一题,\(O(n^2\log n)\) 能过 \(15000\) . 虽然看起来强制在线,其实是一道假的在线题.首先按时间建立线段树,先序遍历整棵树,到叶子时进行更新并回答询问. 更新时将物品当做标记,打到线段树上 ,遍历到一个节点时,都在上面做背包,往儿子走时将背包数组拷贝下来,到另一个儿子重新拷贝一次,故背包个数和深度相同. 询问时由于已经维护好了目前的背包,可以直接询问. 这就是\(\text{dfs}\)…
题目链接: https://loj.ac/problem/136 思路: 在我的这篇博客中已经讲到什么是最短瓶颈路,同时给出了一个用Kruskal求最短瓶颈路的一个简洁易懂的方法,然而这道题目可以看作求所有点对的最短瓶颈路,显然那篇博客题解的方法不太管用,于是改进后有了这个算法: 我们还是先用Kruskal求出最小生成树,同时记录最小生成树中个点与哪些点相连.然后我们把这个最小生成树转化为有根树来进行DFS处理.若正在处理的点编号为\(u\),它的一个后继点(即将DFS)编号\(v\),已经DF…
Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 619    Accepted Submission(s): 214 Problem Description There are N vertices connected by N−1 edges, each edge has its own len…
#include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector<int>haoren[100010];int sum=0;void dfs(int x,int y,int flag){    if(x==y)        flag=1;//如果和被指认的人相同,则定为狼    sum+=flag;//并且后面直接或间接认为刚才那个是狼的人是好人的人也都是狼 …
题面 传送门 分析 看到约数之和,我们首先想到约数和公式 若$ x=\prod_{i=1}^{n}p_i^{k_i} \(,则x的约数和为\) \prod_{i=1}^{n} \sum_{j=0}^{k_i} p_i^j$ 那么我们可以DFS枚举x的质因数分解式,然后判断求出的约数和是否等于s 具体来说,我们先枚举选的质数\(p_i\),对于每个\(p_i\)枚举他们的指数\(k_i\)(指数为0相当于不选),然后计算和\(tmp=1+p_i+p_i^2+\dots+p_i^{k_i}\) 然后…
题意: 给定两个矩形,输出这两个矩形把平面分成了多少块. 题解: 本来是道计算几何的大讨论,被我生生写成了bfs. 离散化边,注意不重合的边中间要空出来一格,四周也要空出来一圈,然后暴力bfs计算一共有几块即可. 不这么暴力的方法倒也不是没有,观察下图,点与长方形的关系存在如下25种,那么两点确定一个长方形,两个长方形的关系则共有625种 至于这个表怎么打,好像还得借助一下bfs. #include<iostream> #include<queue> #include<alg…
不同最小生成树中权值相同的边数量是一定的, 而且他们对连通性的贡献是一样的.对权值相同的边放在一起(至多10), 暴搜他们有多少种方案, 然后乘法原理. ------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace s…