题目大意: 给定n个爆破点的信息 x y r w 表示爆破点位置为 (x,y) 爆破范围是以位置为圆心 半径为r的圆 引爆这个点的代价为w 引爆某个点时 其他位置在该爆破范围内的爆破点也会被引爆 求引爆所有爆破点的最小的爆破代价 这道题跟 上一篇的 OJ 22833(POJ 2186) 差不多 那题是缩点再计算出度 这题是缩点再计算入度 以爆破关系建图 即若引爆 i 点能使 j 点被引爆 那么连一条 i 到 j 的边 若存在点 k 的位置被包含在点 j 的爆破范围内,点 j 的位置被包含在点 i…
杭州现场赛的题.BFS+DFS #include <iostream> #include<cstdio> #include<cstring> #define inf 9999999 using namespace std; char mp[105][105]; int sq[5][5]; int step[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; struct pos { int x,y; }; int n,m,prn,x,y,tmp,ans…
A(hdu5933):(贪心) 题意:长度为n的数组: a1, a2,⋯, 每次操作要么可以merge两个相邻的数为一个, 值为两个数的和; 要么可以把一个数分裂成两个, 两个数的和为原数. 用最少的操作把数组变换成长度为K且所有数值相等的数组, 无解输出-1 分析:注意到是只能合并相邻的数,那么从前往后,对于一段数,它们的和是所期望平均值的倍数时候,那么就将它们单独操作计算次数. B(hdu5934):(强连通分量) 题意:二维平面上有 n 个炸弹,每个炸弹有个引爆的代价和爆炸半径,问至少花费…
/** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多个 问,给定p个重塔,q个轻塔,问有多少种放法.. 思路: 1. 一行中有两个重塔, 2. 一列中有两个重塔 3. 在该行及在该行塔所在的列只有一个塔,重塔或者轻塔. 对以上三种情况 挨个处理: 1. 设有i行有两个重塔,j列有两个重塔,则一共占 i+2*j 行, j+2*i列,共用2*(i+j)个…
题意:维护一个圈,实现六个功能,给某位置起的一些数增加某值,反转某一段数,添加删除某些数,移动当前所指的位置, 简单的splay,把圈拆成链,对于每种操作,处理一下. #define inf 0x3f3f3f3f #define keyTree (ch[ ch[root][1] ][0]) ; struct SplayTree { int sz[maxn]; ]; int pre[maxn]; int root , top1 , top2; int ss[maxn] , que[maxn]; v…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: 目的:让你从 '@' 点出发,然后每个点只能走一次,求出最小的距离: 解题思路:先用 bfs 求解出任意两点之间的距离,用 ans[i][j],表示点 i 到点  j 的距离: 然后用 dfs 递归求出从起点经过所有点的距离中,比较出最小的: AC代码: #include<iostream> #…
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdio> #define Maxn 100 using namespace std; <<],num[Maxn],bag[Maxn][Maxn],g,b,s,now[]; bool vi[Maxn]; int dfs(int S,int now[]) { if(vi[…
 B Stealing Harry Potter's Precious 题目大意:给定一个n*m的地图,某些点可以走,某些点可以走某些点不可以走,给定一个起点,又给出了k个点k<=4,要求从起点经过K个点最短的长度是多少 思路:给每个点标定状态为[x][y][state],state是压缩状态的已经走过需要走过点的集合,然后bfs一下即可 #include<cstdio> #include<queue> #include<cstring> #define maxn…
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位数为偶数的时候3456就分为34和56,34-1=33,回文数3333,3456-3333=123然后继续算:当位数为奇数的时候34567就分为34和67,5-1=4,回文数34443,34567-34443=124然后继续算.但是一年都没有写过高精度减法的题了,这个大模拟写了很久最后判断奇偶性都判…
题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. 则我们可以用线段树优化建图. 具体步骤就是,建两棵线段树,每次新建一个虚节点,然后把需要向外连边的区间在一棵线段树上向这个节点连边,并从这个节点在另一棵线段树上向应被连边的区间连边. 求解答案 建完图之后,考虑如何求答案. 首先,我们\(Tarjan\)缩点,显然一个强连通分量内的所有节点可以相互…