CF G. Orientation of Edges BFS】的更多相关文章

来两遍 $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<<…
链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走, 'P'代表人物位置,'K'代表钥匙,'E'代表出口.人物一个,钥匙有多个, ('K'的数量<=50)),出口一个,每个位置可以向(上,下,左,右)四个 方向走一格,花…
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…
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-G.html 题目传送门 - 2018牛客多校赛第三场 G 题意 给定一个 $n$ 个节点的树,有 $k$ 种颜色. 现在让你给每一个节点都染上一种颜色,总共有 $k^n$ 种方法. 现在问,在所有染色方案中,使得相同颜色点对之间的最短距离为 $D$ 的有多少种方案. 答案对于 $10^9+7$ 取模. $n,k,d\leq 5000$ 题解 首先我们来算…
/*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*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…
这个套路挺有意思的. 把 $trie$ 和 $fail$ 树都建出来,然后一起跑一跑就好了~ #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> #define N 500004 #define setIO(s) freopen(s".in","r",stdin) using…
 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…
题目: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…
题目大意: 给定n m 第一行有n个数 第二行有m个数 接下来n行每行m列 有 = < > 位于 i j 的符号表示 第一行第i个数与第二行第j个数的大小关系 1.将n+m个数 当做按顺序编号的点 则第二行的数是编号为 n+j 的点 2.先处理=的数 将所有=的数指向同一个父亲 3.再处理不是=的数 找到两者的父亲 如果父亲相同说明两者= 与目前处理的情况相悖 无解 否则 按由小到大的关系在两者(的父亲)间连单向边(小连向大) 此时较大的点入度+1 4.此时查看所有点的入度 入度为0 说明这个…
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时间t去更新新的x,y和时间t+1,vis数组也是三维的,等于多一层状态进行表示dis数组,把每个状态加入队列,直到到达终点或者队列为空,即可求出最佳答案. #include<bits/stdc++.h> using namespace std; typedef long long ll; stru…
题目描述 Description There is a strange storehouse in PKU. In this storehouse there are n slots for boxes, forming a line. In each slot you can pile up any amount of boxes. The limitation is that you can only pile a smaller one above a bigger one, in ord…
这里给出一个后缀自动机的做法. 假设每次询问 $t$ 在所有 $s$ 中的出现次数,那么这是非常简单的: 直接对 $s$ 构建后缀自动机,随便维护一下 $endpos$ 大小就可以. 然而,想求 $t$ 在 $trie$ 树中一个节点到根的字符串中的出现次数就难了很多. 我们慢慢讲: 首先,我们对题中给的 $trie$ 树(即所有 $s$ 串)构建广义后缀自动机. 因为后缀自动机能识别所有的子串,所以可以直接将 $t$ 在自动机上匹配. 假设匹配成功,即得到终止节点 $p$. 那么我们想求 $s…
// 深夜补水题,清早(雾)写水文 A. Automatic Door 题意 \(n(n\leq 1e9)\)个\(employee\)和\(m(m\leq 1e5)\)个\(client\)要进门,\(employee\)进门的时刻为\(a,2a,...,.na\),\(client\)进门的时间则由输入数据给定. 这个门很厉害,是个自动门.如果第\(k\)时刻有人要进门,那么它会在第\(k\)时刻打开,在第\(k+d\)时刻再关闭,在\([k,k+d]\)时刻要进门的人都能在这段期间进门.…
A. Automatic Door 对于规律的点可以推公式计算,对于噪点则暴力计算,时间复杂度$O(m\log m)$. #include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<math.h> #include<set> #include<map> #include&l…
题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉树的树边长度(欧几里德长度)总和最小,输出这个总和.如果不能,输出-1.答案与标准答案相差1e-6内都认为是正确的. 算法讨论: 起初是这样想的,肯定是MCMF,费用是距离,然后流量一开始我是这样搞的:从父亲向儿子连流量为2的边.但是你会发现这样有一个问题,就是如果某个结点如果真的有两个儿子的话,那…
树及二叉树: 树:(数据结构中常见的树) 树的定义…
题目链接: https://cn.vjudge.net/problem/POJ-1724 N cities named with numbers 1 ... N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the num…
n个点m条无向边的图,油箱有上限,每个单位的汽油能走1单位距离,每个城市的油价val[i], 对于每个query,求s到e的最小花费. dp[i][j]表示到达第i个城市,油箱剩余油量j时的最小花费.用bfs扩充节点,每个点拆成100个节点,时间复杂度还是可以接受的. #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<fstream&g…
我的BFS板子 struct node{/*略*/};//表示一个状态 std::map<node,bool>vis;//判断每个状态是否已访问过 std::queue<node>q;//BFS扩展队列 //BFS主代码 q.push(start_node); //初始节点入队 vis[start_node] = 1; while (!q.empty()) { node head = q.front(); //去队首元素进行拓展 q.pop(); for (int i : dire…
Graph.java package Graph; import LinearLIst.bag.Bag; import edu.princeton.cs.algs4.In; public class Graph { private final int V; //顶点数目 private int E; //边的数目 private Bag<Integer>[] adj; //邻接表 /*创建一个包含V个顶点但是不包含边的图*/ public Graph(int V){ this.V=V; thi…
写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个人 初始值为R 有n项工作每项工作有两种属性 a和b 当且仅当 R>=a时可以完成这项任务 且R+=b; 每项任务只能完成一次 问能否把所有工作完成.注:b可能为负. 怎么做?显然对于b>=0的工作我们按照a由小到大的顺序直接做如果有不能完成的任务的话 那便一定不能完成.考虑如何做负值的工作? 想…
在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都必须同向.如果图中任意两点都是连通的,那么图被称作连通图.如果此图是有向图,则称为强连通图(注意:需要双向都有路径).图的连通性是图的基本性质.   严格定义(摘抄): 对一个图 G=(V,E) 中的两点 x 和 y ,若存在交替的顶点和边的序列 Γ=(x=v0-e1-v1-e2-...-ek-(v…
/* 题意:求出多个全排列的lcs! 思路:因为是全排列,所以每一行的每一个数字都不会重复,所以如果有每一个全排列的数字 i 都在数字 j的前面,那么i, j建立一条有向边! 最后用bfs遍历整个图,求出源点到每一个点的距离,其中最大的距离就是最长的公共子序列的长度! */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue&g…
The Monocycle Time Limit: 3000MS64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description Problem A: The Monocycle A monocycle is a cycle that runs on one wheel and the one we will be considering is a bit more special. It has a solid w…
题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小. 意思应该都能明白. 解法:考虑将这棵树摆直如下: 那么我们可以把最中间的那条直径边删掉,然后在分成的两颗子树内求一个直径中心点,那么这两个点就可以作为答案. 反正当时就觉得这样是正确的, 但是不能证明. 于是,几个bfs就可以搞定了. 当时写TLE了,原因是存要删的边我用了map<pair<int,int>,int>, 后来改掉就不T了,map这种…
比较简单的题 搜索4个方向,维护位子的值. #include<stdio.h> #include<string.h> #include<queue> using namespace std; ],b[]; ][][][][][]; struct node { int x1,x2,x3,x4,x5,x6,step; }; int bfs() { queue<node>q; node temp; temp.x1=a[];temp.x2=a[];temp.x3=a…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26898 思路:我们可以给定有直接边相连的两点的距离为1,那么就是求源点出发能够走偶数步的所有的点的个数. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vec…
题目链接:http://hihocoder.com/problemset/problem/1328 这个题bfs到时候不止要存当前的坐标,还要存当前有哪几把钥匙.因为5把钥匙,所以可以直接用位来存,这样也可以解决一个房间里有好几把钥匙的情况. 还有就是走的过程中,一个点重复走多少次的问题,我们用vis(x,y,k)来记录坐标(x,y)的时候拿着钥匙位压后为k的情况,并且初始化成0x7f7f7f,每次更新最短路,假如有重复走并且拥有钥匙情况相同的情况就可以剪掉了. /* ━━━━━┒ギリギリ♂ e…
广度优先树 对于一个图G=(V,E)在跑过BFS算法的过程中会创建一棵广度优先树. 形式化一点的表示该广度 优先树的形成过程是这样的: 对于图G=(V,E)是有向图或是无向图, 和图中的源结点s, 我们定义图G的前驱子图为Gf={Vf, Ef}. 其中Vf = {v ->V : v.f <>NIL} AND {s}, Ef = {(v.f , v) : v->(Vf - {s})} 即,G的前驱子图Gf是这样定义的: Gf中的点集合Vf  中的点是G中的前驱(父结点)结点不为空的…
在一个迷宫里面需要把一些字母.也就是 ‘A’ 和 ‘B’连接起来,求出来最短的连接方式需要多长,也就是最小生成树,地图需要预处理一下,用BFS先求出来两点间的最短距离, ********************************************************************************** #include<algorithm> #include<stdio.h> #include<; ][] = { {,},{,},{-,},{,…