Trips CodeForces - 1037E(思维dfs)】的更多相关文章

题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最后一天的  前几天的数量肯定小于最后一天的数量   然后从后向前每天互相消去互为朋友的a[i] 和 b[i] 然后再判断a[i] 和 b[i] 是否符合还符合情况 把每个不符合的用vis标记 防止重复减 #include <bits/stdc++.h> #define rap(i, a, n) f…
题面 传送门 题目大意:给定初始根节点为1的树,有3种操作 1.把根节点更换为r 2.将包含u,v的节点的最小子树(即lca(u,v)的子树)所有节点的值+x 3.查询v及其子树的值之和 分析 看到批量修改子树,我们想到将树上操作转化为区间操作 通过DFS序我们可以实现这一点. 对于每个节点x,我们记录它在前序遍历中的位置l[x],再一次回到x时的序号r[x],则x及其子树的区间为前序遍历中的[l[x],r[x]] 具体可点击这篇博客 那么,3种操作如何进行: 操作1.用一个变量root记录当前…
题目链接:1037E - Trips 题目大意:有n个人,m天,每天晚上都会有一次聚会,一个人会参加一场聚会当且仅当聚会里有至少k个人是他的朋友.每天早上都会有一对人成为好朋友,问每天晚上最多能有多少人参加聚会.朋友关系不满足传递性. 相当于有n个点,进行m次加边操作,每次操作后附加一个询问,问最大点集的大小,使得点集中每个点的度数均大于等于k 题解:如果直接边加边询问可能比较麻烦,本着“正难则反”的原则,我们可以将题目转化为,初始有m条边,每次操作是先询问当前的答案,再删去一条边. 现在我们就…
题目传送门: 解题思路: 正着搞好像有点恶心. 反着搞. 一边删一边搞,从崩坏的地方开始,入度--. 最后dfs崩坏,更新答案. 注意要把边删掉防止重复崩坏. 代码: #include<cstdio> #include<cstring> #include<algorithm> struct pnt{ int hd; int ind; bool ded; }p[]; struct ent{ int twd; int lst; }e[]; int cnt; int n,m,…
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼怪. 然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪. 于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标. 第一次射击的分析结果会反映在一张由n个点和m条边组成的无向图上.现在让我们来确定这张图 是不是可以被认为是章鱼怪…
题目大意: 给出一棵树,每次只能摧毁有偶数个度的节点,摧毁该节点后所有该节点连着的边都摧毁,判断一棵树能否被摧毁,若能,按顺序输出摧毁的点,如果有多种顺序,输出一种即可 基本思路: 1)我一开始自然而然想到的,当然是贪心,首先判断能否可行,然后我是想先从叶子到根摧毁一编,然后从根开始再摧毁,我觉得应该可行,还没试验: 2)rank前10的代码,我就不不自量力的去评价了,自己体会吧. 代码如下: #include<cstdio> #include<cmath> #include<…
题意:给你\(n\)个顶点和\(m\)条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后从某个数开始跑dfs,如果这一边所有点的度数都为\(2\),那么就能构成一个单环. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include &l…
原题 题目大意: 有\(n\)个人,起初他们都不是朋友.总共有\(m\)天,每天会有两个人成为朋友.他们计划在晚上出去旅游,对于一个人,有如下两种情况: 1.要么他不出去旅游 2.要么有至少\(k\)个朋友跟他一起出去 其中\(n,m,k\)都会给出 (注意,友谊是非传递性的,比如\(a\)和\(b\)是朋友,\(b\)和\(c\)是朋友,但\(a\)和\(c\)不一定是朋友) 你的任务是,对于\(1\)到\(m\)天,输出每天晚上最多可以出去玩的人数 首先,我们将题目抽象为一张无向图,问题转化…
http://codeforces.com/contest/987/problem/D 题目大概: 给出一个n个城镇m条边的图,给出每个城镇拥有的特产(可能多个城镇有相同特产).有k种不同特产. 要求每个城镇需要其他城镇运输特产到自己的城镇,每个城镇必须拥有s种特产,那么在城镇满足s种特产后,需要的最短路径是多长,最短路指的是特产运输过来走过的边的数量. 分析: 一开始以为是道水题,因为我只要对每个点都进行一次DFS,那问题就很简单了,但是...细想下,这其实是不行的,因为会TLE. 那现在我们…
题目链接:http://codeforces.com/contest/734/problem/E 题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白. 思路:先进行缩点,同色连通块当作一点,用dfs实现并得到新图.答案即为(最长直径+1)/2. 关于最长直径的求法:http://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html #include<bits/stdc++.h> using names…
题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少修改几只袜子的颜色,可以使每天穿的袜子左右两只都同颜色. 好恶心的袜子,一会儿看成改袜子的颜色,一会儿看成改l,r的颜色,一会下标看混......不过,菜是原罪=_= 思路:先建图,在每个连通分支中,把所有袜子的颜色都改成出现颜色次数最多的那个颜色,即该分支节点个数 - 最多出现次数 #includ…
题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块water能使湖泊数量降到k个. 思路:本来最有把握的一次CF,D题小错误一直RE,C题最后也FST了...... 先DFS出各湖泊的大小并用其中一个点存在结构体中,最后有num0个湖泊,再按湖泊的大小排序,需要填的湖泊为前n-k小的湖泊,简单DFS一下就好了. #include<bits/stdc…
J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个节点有多个儿子,按照儿子从小到大的顺序,依次访问,不存在则输出-1. 预处理记录一下每个节点的出入时间 最后每次query直接判断就好了 #include <cstdio> #include <algorithm> #include <vector> using names…
题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级幸运数字就是只含有数字4和数字7,并且4和7的数目相同) 例: Sample Input 4500 47 Sampule Output 4747 47 解题思路:压根没想到用DFS,开始就想着,先判断数字的个数是否是个奇数,如果是个奇数就很好办,直接加一位数字,前一半是4后一半是7,当它的数字个数为…
题目链接:http://codeforces.com/problemset/problem/589/J 题目大意:一个机器人打扫一个密闭的房间,房间由一个矩形构成,'*'表示家具,'.'表示该位置为空,机器人只能扫空的位置,给出机器人的初位置及朝向,如果当前朝向不能再继续往前走了,机器人就会向右转,问一共能清理多少地方. 例: 输入: 2 3U...*. 输出: 4 解题思路:方法应该有很多种,不过我用的DFS.需要注意的就是,机器人的朝向,只有当前方有障碍时,他才会右转.还有就是DFS的结束的…
题目链接:https://codeforces.com/problemset/problem/1099/F Mitya and Vasya are playing an interesting game. They have a rooted tree with $n$ vertices, and the vertices are indexed from $1$ to $n$. The root has index $1$. Every other vertex $i≥2$ has its p…
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间的最少边数,求加边之后任意两点长度之和 思路 一看到求任意两点,知道需要用每条边的贡献计算(每条边使用了多少次) 每条边的贡献等于边左边的点数*边右边的点数 然后就一直不知道怎么解决加边后的问题,不知道要标记哪些东西,怎么减去 单独看一条路径,加边之后, 假如边数是偶数的话,边数/2 假如边数是奇数…
https://codeforces.com/contest/1111/problem/C 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出).你是灭霸你要用以下方法消灭这k个复仇者:一开始你获取整个区间[1..2^n]假设你当前获取的区间为[l,r]mid = (l+r)/2那么你每次有两种选择1.将整个区间全都毁掉,如果这个区间里没有复仇者,那么花费为A,否则花费为B复仇者个数区间长度2.将区间分为[l,mid]和[mid+1,r]分开毁掉(即分别获取[l,mid…
题目链接:https://codeforces.com/gym/102012/problem/I 题意:问有多少个 1 到 n 的排列,使得用给定的 k 个比较器(使 au 和 av 有序)排序后,整个序列的最长上升子序列为 n - 1. 题解:先处理出全部最长上升子序列为 n - 1 的排列,然后枚举每个比较器使用与否,计数即可.(题目卡常,dfs要加引用...) #include <bits/stdc++.h> using namespace std; #define ll long lo…
Persistent Bookcase CodeForces - 707D time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output Recently in school Alina has learned what are the persistent data structures: they are data structures…
ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感觉不难,可能那时脑子混了,题意也没理解清楚.根据题目很容易看出,这跟拓扑排序有关,不过拓扑排序的作用在于判断给出的关系是否矛盾,在找判断可能是第(n+1)/2个元素还主要是思维. 哪个元素可能是中间的(n+1)/2个元素呢,就是那些明确在它前面的元素(比它大的)的数目和在它后面的元素(比它小的)的数目都不…
解法参考https://www.cnblogs.com/BearChild/p/7683114.html这位大佬的,这位大佬讲得很好了. 这道题还是有一定的思维的. 直接贴代码: #include<iostream> #include<cstdio> #include<vector> #include<queue> #include<cstring> using namespace std; +; +; int n,m,ecc_cnt,ans,c…
/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给n,m和k,n和m为所给矩阵的高和宽.k是要求最多剩下的湖的数量. 在所给的矩阵中,*代表陆地,.代表水. 湖的定义是一片连续的水(上下左右四个方向),并且水不含边界. 水含边界的情况被成为海. 问最少填多少湖的面积,使得湖的数量减少到k... 思路: 水dfs,记录有多少湖,并且记录每个湖的面积,然后排下序贪心就好. 坑: 做题一定别急一定别急一定别急一定知道自己写的是什么!!!! */ #include<bits/stdc++.h>…
Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status Description Pasha has many hamsters and he makes them work out. Today, n hamsters (n is even) came to work out. The hamsters lined up and each hamster e…
题目链接 题意:给一个由“.”组成的联通区域,求再添加k个‘#'以后还是联通区域的方案. 分析:做题的时候犯二了,用DFS,一直搜到边缘,然后从边缘依次往回 回溯,回溯的过程中填充’#‘ 一直填充k个. 因为在搜索的过程中,一直都是vis[][]标记的,所以时间复杂度最多只是搜了所有的边,即500*500*4. DFS搜索的时间复杂度,取决于边的个数. #include <iostream> #include <cstdio> #include <cstring> #i…
You are given a connected undirected graph consisting of nn vertices and mm edges. There are no self-loops or multiple edges in the given graph. You have to direct its edges in such a way that the obtained directed graph does not contain any paths of…
大意: 给定森林, 要求构造一个表, 满足对于每个$x$, 表中第一次出现的$x$的祖先(包括$x$)是$a_x$. 刚开始还想着直接暴力分块优化一下连边, 最后按拓扑序输出... 实际上可以发现$a_x$要么等于$x$, 要么等于$fa_x$, 直接dfs一边就好了... #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #include <set…
Medicine faculty of Berland State University has just finished their admission campaign. As usual, about 80%80% of applicants are girls and majority of them are going to live in the university dormitory for the next 44 (hopefully) years. The dormitor…
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为位置$i$处的$F$复位所花费时间, 有 $dp[i] = max(dp[i-1]+1,cnt_i)$, $cnt_i$为前$i$位$M$的个数 $dp$最大值即为答案 #include <iostream> #include <algorithm> #include <cstd…
Masha has recently bought a cleaner robot, it can clean a floor without anybody's assistance. Schematically Masha's room is a rectangle, consisting of w × h square cells of size 1 × 1. Each cell of the room is either empty (represented by character '…