自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

围巾的ACM博客

刚毕业~

  • 博客(13)
  • 收藏
  • 关注

原创 2016弱校联盟10.5台湾场 J Just Convolution(鸽巢&&暴力)

思路:注意到数组的数据范围都是0-n-1,那么它们的最大值最大到2*(n-1),从大到小枚举更新答案,如果已经出现过则不用再更新了,因为肯定不会更优 #include using namespace std; const int maxn = 4*1e5+7; int a[maxn],b[maxn],c[maxn]; int n; int main() { while(scanf

2016-10-31 23:35:12 482

原创 hdu5934 Bomb(强连通缩点)

思路:n^2枚举每个炸弹能炸到的炸弹建图,然后跑强连通缩点并且维护这个点的最小花费,缩完点之后的图是一颗有向树,那么直接从入度为0的点开始炸即可 #include using namespace std; const int maxn = 1005; #define LL long long struct Node { LL x,y; LL r; int c; }a[maxn];

2016-10-29 17:23:10 648

原创 HDU 5927 Auxiliary Set(树上搞事)

思路:考虑对于每一个询问的点按照深度排序,如果该不重要的点的儿子有两个,那么就证明可以贡献一个答案,如果该不重要的点没有儿子了,那么对于该点的父节点的儿子数减一 #include using namespace std; const int maxn = 100000+7; vectore[maxn]; int dep[maxn],fa[maxn],son[maxn]; int a[ma

2016-10-22 00:14:00 627

原创 HDU 5520 Number Link(费用流)

题意:给你一个n*m的网格,部分网格有数字,要求奇数的数字要和偶数的数字连在一起,空白的数字要成环,给你每个格子连接上下左右的费用,求满足条件最小费用 思路:考虑费用流,讲每个点拆点,源点S连向所有奇数点的入点,T连向所有偶数的出点,然后S连所有空白的入点,出点连T,上下左右的入点连向各自的出点,这样跑一次最小费用最大流即可 #include using namespace std;

2016-10-18 18:19:31 780

原创 51nod 1127 最短的包含字符串(滑窗)

思路:求解固定区间最大最小问题,一般都是滑窗 #include using namespace std; const int maxn = 1e6+7; char s[maxn]; mapvis; int main() { scanf("%s",s+1); int ans = 1e9; int len = strlen(s+1); int num = 0; int

2016-10-05 17:46:25 701

原创 51nod 1163 最高的奖励(优先队列)

思路:直接开个优先队列搞搞,如果前面的行程已经安排满了,那么就替换最小值 #include using namespace std; #define LL long long const int maxn = 50000+7; int n; struct Node { int w; int t; }a[maxn]; bool cmp(Node a,Node b) { return

2016-10-05 17:44:49 362

原创 51nod 1267 4个数和为0

思路:先n^2预处理出所有两两的组合,那么就变成要找a+b==0的问题了,那么排序O(n)去找就可以了 #include using namespace std; #define LL long long const int maxn = 1005*1005; struct Node { LL v; int x,y; }node[maxn]; bool cmp(Node a,Node

2016-10-05 17:42:52 1171

原创 51nod 1065 最小正子段和(前缀和)

思路:处理一个连续区间的问题一般都要从前缀和开始考虑。。这是套路 #include using namespace std; const int maxn = 50000+7; #define LL long long struct Node { LL v; int id; }a[maxn]; bool cmp(Node aa,Node b){return aa.v==b.v?aa.

2016-10-05 17:39:21 403

原创 51nod 1276 岛屿的数量(乱搞)

思路:对询问和岛屿都排个序离线处理,对于在角落的岛屿特判一下随便搞搞就可以了 #include using namespace std; const int maxn = 50000+7; struct node { int h,id; }a[maxn],q[maxn]; bool cmp(node a,node b){return a.h<b.h;} int ans[maxn],vi

2016-10-05 17:24:47 375

原创 51nod 1272 最大距离(贪心)

思路:排个序,每次找比它位置大的更新答案,比它位置小的更新位置,每次更新位置都只会往左靠,显然会更优 #include using namespace std; #define LL long long const int maxn = 50005; struct Node { int v,id; }a[maxn]; bool cmp(Node aa,Node b){return aa

2016-10-05 16:35:33 346

原创 51nod 1393 0和1相等串(鸽巢)

思路:首先可以将问题抽象成一个括号问题,将0视为-1,1视为1,那么如果0和1的个数相等,他们的前缀和为0,这个时候就可以直接更新答案了,而如果不为0,这个时候如果前面有一段的前缀和等于现在这个前缀和,那么证明两个前缀和之间的和为0,那么更新答案,仔细想想是不是? #include using namespace std; const int maxn = 1000000+7; char

2016-10-05 16:27:29 407

原创 51nod 1640 天气晴朗的魔法(kruskal)

思路:题目比较难懂,其实就是先求一次最小生成树把最大的边权记录下来,然后对小于这个边权的边做一次最大生成树就可以了 #include using namespace std; const int maxn = 1e5+7; const int maxm = 2*1e5+7; #define LL long long int fa[maxn]; int Find(int x){return

2016-10-05 16:24:15 1131

原创 51nod 1270 数组的最大代价(DP)

思路:对于每一个位置,最优的策略一定是1或者自己,那么dp一下就可以了 #include using namespace std; const int maxn = 50005; #define LL long long LL dp[maxn][2]; LL a[maxn]; int main() { int n; scanf("%d",&n); for(int i = 1;

2016-10-05 16:22:08 333

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除