dfs
文章平均质量分 56
jinglinxiao
这个作者很懒,什么都没留下…
展开
-
团体程序设计天梯赛-L3-015-球队“食物链”(状压dfs)
题目链接:团体程序设计天梯赛-L3-015-球队“食物链”显然题目是要找一条字典序最小的哈密尔顿环路。 根据题目的要求进行构图,并且将邻接矩阵排序(因为要最小字典序)。如果有答案,一定是从1开始,因此从1开始dfs。vis[u][st] 表示点u状态为st(st记录了到达u之前哪些点访问过)这个状态是否访问过。根据哈密尔顿环的性质显然每种状态只需要访问一次。因此时间复杂度为 O(n2n)O(n2^原创 2017-04-08 16:28:12 · 459 阅读 · 0 评论 -
POJ-2763-Housewife Wind(LCA+dfs序线段树)
题目链接:POJ-2763-Housewife Wind有边权修改的树中两点距离查询。 因为有边权修改,所以用线段树维护到根的序列。 LCA求距离。 这题有个坑点就是不能用vector#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn=1e5+7;int a[maxn]原创 2017-03-28 21:50:53 · 466 阅读 · 0 评论 -
USACO-Prime Palindromes(部分筛法判素数,回文数生成)
题目链接:USACO-Prime Palindromes首先生成所有的回文数,最多应该不超过1e5个。这里可以加一个剪枝,位数为偶数/5的回文数不可能是素数然后对每个数进行素数判定,素数判定可以用部分筛来实现。先生成小于sqrt(n)的所有素数。当判定一个数是否为素数时,检测这个数是否能除尽素数表中的数即可。这样复杂度可以比sqrt(n)小,威神说可以达到O(sqrt(n)/log(n原创 2017-03-04 13:55:08 · 293 阅读 · 0 评论 -
USACO-Mother's Milk(搜索)
题目链接:Mother's Milk由于a和b最大是20,且当a,b确定时,c也确定了。所以可以根据a,b来描述状态。在每个状态下,只能进行6种操作,a->b,a->c,b->a,b->c,c->a,c->b 。每种状态仅访问一次,然后进行状态转移就行了。/*ID: xdujlx1PROG: milk3LANG: C++*/#includeusing names原创 2017-03-04 11:38:09 · 209 阅读 · 0 评论 -
Codeforces Round #396 (Div. 2)
比赛链接:Codeforces Round #396 (Div. 2)A:找最长不公共连续子序列。显然若s!=t,输出s和t最大长度,否则输出-1.#includeusing namespace std;typedef long long ll;int main(){ string s,t; while(cin>>s>>t) { if(s.length()>t.len原创 2017-02-09 20:24:03 · 104 阅读 · 0 评论 -
Codeforces Round #397 - E - Tree Folding (找树中直径,dfs)
题目链接: Codeforces Round #397 - E - Tree Folding题意:给定一棵树,每次操作可以选择一个点 rtrt ,然后选择 rtrt 的两条链(这两条链长度相同,且除了rtrt外的所有点都不与不是自己链的点相交),然后合并这两条链。求能否通过有限次操作使得最后得到一条链,并输出这条链的最小长度。解法:先找到树中直径(树中最长路径)的中点,将这个中点当成根,然后通过原创 2017-02-16 20:38:47 · 345 阅读 · 0 评论 -
HDU-3974-Assign the task(线段树维护dfs序)
题目链接:HDU-3974-Assign the task题意是给定一棵树,然后一种操作是指定一个点,这个点及这个点的的子树被染色,另一种操作是指定一个点,问这个点的颜色。可以通过dfs树将这棵树放在线段上,记结点u在线段上的位置是pos[u],以结点u为根的子树的结点总数是cnt[u],那么在每次染色就是染色线段上pos[u]~pos[u]+cnt[u]-1这段区间。然后用线段树维护原创 2017-01-16 18:08:57 · 1060 阅读 · 0 评论 -
Weekly Training Farm 23
比赛链接:Weekly Training Farm 23A:优先队列乱搞:#includeusing namespace std;typedef long long ll;struct cmp{ bool operator () (const ll a,const ll b) { return a>b; }};int main(){ int n; while(c原创 2017-02-04 16:21:50 · 311 阅读 · 0 评论 -
NOIP - 2016 - 天天爱跑步(dfs计数)
NOIP - 2016 - 天天爱跑步把每一条边分成向上的边和向下的边。对于向上的边:如果 d[s]−d[x]=w[x]d[s]-d[x]=w[x] ,且 ss 在 xx 的子树中,且 ss 开始的路径经过 xx ,那么 ss 会被 xx 观察到。计数这一部分可以用 dfs ,当回溯到 ss 路径的 lcalca 时,把这部分的贡献消除掉就行了。对于向下的边:如果 d[t]−d[x]=len−w[x原创 2017-08-27 12:04:13 · 558 阅读 · 0 评论