cf 1037D BFS】的更多相关文章

$des$一个 n 个点 m 条边的无向连通图从 1 号点开始 bfs,可能得到的 bfs 序有很多,取决于出边的访问顺序.现在给出一个 1 到 n 的排列,判断是否可能是一个 bfs 序. $sol$对于每个节点,令其权值为在给定序列中的位置.然后从 1 号点开始正常的 bfs,出边的访问顺序按照权值从小到大访问.最后将得到的 bfs 序与给定序列比较,若完全一致则是合法的. $code$ #include <bits/stdc++.h> using namespace std; #defi…
1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多少个湖,然后输出. #include<bits/stdc++.h> #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,s…
/*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思路:当然是*2可以掠过的步数更少啦,如果n是输入,m是输出. 如果n大于m,不能使用红色按钮,很容易看出,步数就是n-m. 如果n比m小,如果m是偶数的话,m/2,如果m是奇数,m+1,这样一直循环判断n是不是还比m小,不符合就跳出循环,进入第一个如果.*/ /*正向BFS #include<ios…
 Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya has found a strange device. On the front panel of a device there are: a red button, a blue button and a display showing s…
Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya has found a strange device. On the front panel of a device there are: a red button, a blue button and a display showing so…
http://codeforces.com/contest/676/problem/D 题目大意: 勇者去迷宫杀恶龙.迷宫是有n*m的方格子组成的.迷宫上有各种记号,这些记号表达着能走的方向.当且仅当两个房间的记号是相互联通的,才能走过去. 我们有如下选择,最直白的一种就是直接走到另外一个格子上去(当然格子得相互连通),第二种操作就是顺时针旋转所有的格子(格子的位置保持不变). 问,勇者要多久才能走到恶龙所在的地方. 思路: 表示这道题真心不会...下面的这个代码也是参考了别人的吧...换成我的…
The mobile application store has a new game called "Subway Roller". The protagonist of the game Philip is located in one end of the tunnel and wants to get out of the other one. The tunnel is a rectangular field consisting of three rows and n co…
<题目链接> 题目大意: 给你一颗树的所有边,这些边是无向的,然后给你一段BFS序列,BFS都以1为根节点,判断这段BFS序列是否合法. 解题分析: 就是模拟BFS,某个父亲节点的所有子节点必然是连续一段出现的(如果该BFS序合法的话),所以每次从队列中弹出节点的时候,就将对应位置连续的所有儿子全部标记,如果有儿子不是连续的出现在对应位置,则之后永远不会被标记到. #include <bits/stdc++.h> using namespace std; ; int n,vis[N…
我真是一只菜狗......emm... 题意: 判断一个从1开始的队列是否可以按照bfs的顺序 进行遍历..必须从1开始...然后后边依次是bfs顺序 解析: 看代码能看懂吧...emm...就是把每个有关系的用map标记一下 然后bfs的时候 加一个循环进队列就好了  emm../. #include <bits/stdc++.h> #define rap(i, a, n) for(int i=a; i<=n; i++) #define rep(i, a, n) for(int i=a…
题意:给出 n.m 两数,可以对 n 进行两种操作 减一或者乘二,操作过程中 n 必须保证非负,问使 n 变为 m 至少需要几步操作. 这是我练水题的时候做到的,题目不难,只是我 bfs 一直没怎么用过比较不熟练,RE 了两发,就整理了这题. 首先,若 n==m ,那么步骤数就是 0 ,而若 n > m ,n 进行乘二的操作就会使 n 离 m 更远,所以必然是一直减一,于是步骤数就是 n -m : 若 n < m , 此时由于中间的步骤并不确定,就可以用 bfs 搜索,但是由于使用数组记录某个…
D. Valid BFS? http://codeforces.com/contest/1037/problem/D 题意: 给一个序列,一棵树,判断能否bfs这棵树,得到这个序列. 分析: 将每个点所达到的点,按照序列中出现的位置排序,然后bfs,判断是否相等. 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<iostream>…
C:Ice Cave 有一个m*n的地图,里面包含'.'表示完整的冰块,'X'表示有裂痕的冰块,当游戏者到达完整的冰块时,这个位置的冰块会变成有裂痕的冰块,如果到达有裂痕的冰块时,游戏者会进入下一关 现在给你当前位置和终点,每次移动都是相邻位置互相移动:问游戏者能不能从终点位置进入下一关:起始位置是由上一关下来的,所以都是‘X’ bfs 注意下标是从1开始:  …
题意: 从左上角跳到右下角最少需要多少步,跳的规则为:可以向四个方向的任意一个方向跳当前格子中的步数,若跳不到右下角输出IMPOSSIBLE. 题解: BFS搜索,注意判断边界,标记. 代码: #include <iostream> #include <cstdio> #include <algorithm> #include <stdio.h> #include <cmath> #include <cstring> #include…
题目:http://codeforces.com/contest/986/problem/A 如果从每个村庄开始bfs找货物,会超时. 发现k较小.那就从货物开始bfs,给村庄赋上dis[ 该货物 ]. 但这样还是n^2.考虑有相同货物的村庄,其实可以一起bfs.就是多源bfs.这样就是n*k的了. 多源bfs就是把一些起始点的dis全赋了初值0,然后都放进队列里,之后正常bfs. #include<iostream> #include<cstdio> #include<cs…
题面: 传送门 思路: 真·动态最短路 但是因为每次只加1 所以可以每一次修改操作的时候使用距离分层的bfs,在O(n)的时间内解决修改 这里要用到一个小技巧: 把每条边(u,v)的边权表示为dis[u]+w(u,v)-dis[v],这样边权实际上变成了“这条边离作为最短路的一份子还差了多少” 然后在用这个边权的新图里面更新1到每个点的最短路,再用原来的dis加上这个值,就是当前的最短路了 实际上是把绝对数值转化为了“离最优解的距离”,以此解题 Code: #include<iostream>…
[题目链接] http://codeforces.com/problemset/problem/1037/D [算法] 首先求出每个点的父节点 , 每棵子树的大小 然后判断BFS序是否合法即可 时间复杂度 : O(N) [代码] #include<bits/stdc++.h> using namespace std; ; struct edge { int to , nxt; } e[MAXN << ]; int n , tot; int a[MAXN],fa[MAXN],head…
[链接] 我是链接,点我呀:) [题意] 让你判断一个序列是否可能为一个bfs的序列 [题解] 先dfs出来每一层有多少个点,以及每个点是属于哪一层的. 每一层的bfs如果有先后顺序的话,下一层的节点的出队也是有先后顺序的 因此x是当前层只是一个简单的判断条件,还需要更深入的判断 也就是说它是不是应该在这个时候从队列中出来,也就是说它前面是不是应该有节点比它先出现. 我们需要记录每个节点(dep层)的priority值. 这个值表示了这个节点x它的直系儿子们(dep+1层)在所有dep+1层出现…
题目链接:http://codeforces.com/problemset/problem/1037/D 题目大意: 给出一棵树,询问一个序列是否可能为这棵树从节点1开始遍历的bfs序 题解: 对于每个节点,令其权值等于该元素在给序列中出现的位置 把每个节点的出边按照到达点的权值排序,来一次bfs得到一个bfs序,判断当前bfs序与给定序列是否相等即可 #include<algorithm> #include<cstring> #include<cstdio> #inc…
题目描述 一些公司将在Byteland举办商品交易会(or博览会?).在Byteland有 nnn 个城市,城市间有 mmm 条双向道路.当然,城镇之间两两连通. Byteland生产的货物有 kkk 种类型,每个城镇只生产一种. 为了举办商品交易会,你必须至少带来 sss 种不同类型的商品.将货物从 uuu 镇带到城镇 vvv 将花费 d(u,v)d(u,v)d(u,v) 的费用,其中 d(u,v)d(u,v)d(u,v) 是从 uuu 到 vvv 的最短路径的长度. 路径的长度是这个路径中的…
D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Theseus has just arrived to Crete to fight Minotaur. He found a labyrinth that has a form of a rectangular field of…
来两遍 $BFS,$ 都贪心一下即可. #include <bits/stdc++.h> #define maxn 300009 using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } queue<int>Q; int n,m,s,edges,nn=0; int hd[maxn],to[maxn<<…
题目大意: 给定n m 第一行有n个数 第二行有m个数 接下来n行每行m列 有 = < > 位于 i j 的符号表示 第一行第i个数与第二行第j个数的大小关系 1.将n+m个数 当做按顺序编号的点 则第二行的数是编号为 n+j 的点 2.先处理=的数 将所有=的数指向同一个父亲 3.再处理不是=的数 找到两者的父亲 如果父亲相同说明两者= 与目前处理的情况相悖 无解 否则 按由小到大的关系在两者(的父亲)间连单向边(小连向大) 此时较大的点入度+1 4.此时查看所有点的入度 入度为0 说明这个…
B. Bakery time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. There are m bidirectional roads,…
Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit string "23" Output: ["ad", "ae", &q…
做了1天,总是各种错误,很无语 最后还是参考大神的方法 题目:http://poj.org/problem?id=3083 题意:从s到e找分别按照左侧优先和右侧优先的最短路径,和实际的最短路径 DFS找左右侧 的最短路径 #include <iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<stack> #include<queue> #i…
这道题目真是非常坎坷啊,WA了很多次,但所有的思路都是奔着广搜去想的,一开始出现了比答案大的数据,才想到了应该是优先队列,再说加上也肯定不会错.一开始我读错了题意,以为旋转并且前行需要的时间跟其他一样,但是旋转的动作是需要额外计时的.我的第一种方法错误原因还没有找到,我在旋转以后就直接改动了位置,感觉没有什么本质区别,旋转了以后,肯定要走啊,我直接加上时间也没什么问题,我也把所能想到的测试用例都试过了,与AC代码完全一致,真是搞不懂,这要是CF就好了.于是,学习了别人的代码,改了改我原先的地方,…
CF 331 E. Biologist 题目描述 题目大意:有\(n\)个点,初始时每个点为黑色或者白色,你可以花费\(v_i\)的代价将一个点反色.然后你有许多计划,每个计划要求一个点集中的所有点为同种颜色.满足了一个计划就可以得到\(w_i\)相应的价值,某些计划如果没有被满足,还会付出\(g\)的代价. 感觉这个题有点最大权闭合子图的样子,\(g\)的额外代价也很鸡肋. 然后我们考虑这道题的反色操作.如果第\(i\)个点本来是白色的,那么我们连\((S,i,v_i)\),否则连\((i,T…
Valid BFS? CodeForces - 1037D The BFS algorithm is defined as follows. Consider an undirected graph with vertices numbered from 11 to nn. Initialize qqas a new queue containing only vertex 1, mark the vertex 1 as used. Extract a vertex vv from the he…
毒瘤啊啊啊啊啊 虽然排名还不错,331,但是B我没做出来...... 这是战绩: 可以看到我大发神威势如破竹的A了CDE,但是B把我卡了三次...不然我就能进前300了(还是很水). 逐一分析题目: A不多说了,随便开个map完事. B...比较  x ^ y 和 y ^ x 的大小. 数据范围 [1, 10 ^ 9] 思考之后发现可以取对数. 然后连WA三次,精度分别是1e-10,1e-12,1e-7 赛后发现精度1e-6就A了,WA的那个点是两个10000000000,我...... 拉到自…
A: 我是bfs出一颗树,然后删掉树后面的k个结点. 其实也可以直接bfs出一块连通的s - k个点,其余的.打X就可以了. 很水的题目. /* *********************************************** Author :kuangbin Created Time :2013-12-29 23:26:26 File Name :E:\2013ACM\CF比赛\CF222\A.cpp ***************************************…