2011年10月8日
摘要: HDU_3315由于要求求满足收益最大情况下改变顺序最少的方案,因此我们在建图的时候可以将权值乘以一个常数,然后对原有边的权值自加一个较小量来体现出对该边的“偏好”。#include<stdio.h>#include<string.h>#define MAXD 110#define MAX 1010#define INF 1000000000int V[MAXD], H[MAXD], P[MAXD], S[MAXD], X[MAXD], N;int A[MAXD], B[MAXD], slack, visx[MAXD], visy[MAXD];int G[MAXD][M 阅读全文
posted @ 2011-10-08 22:45 Staginner 阅读(352) 评论(0) 推荐(0) 编辑
摘要: CF 118E首先这个题目需要去判断原图是否是一个双连通分量,因为如果不是双连通分量的话,那么最后在桥的位置就是单向的,只能由一块走到另一块,而不能由另一块走回来。同时,如果原图是双连通分量,那么就一定有解,因为至少存在一个欧拉回路,而其他路的方向就无所谓了,因此在输出的时候只要用dfs顺序将每个边输出一次即可。但问题在于如果分两块去做——先用tarjan判双连通、然后dfs打印路径,这样会超时,我们反思一下判双连通时tarjan算法的本质就是一个dfs,因此我们在判双连通的时候不妨先把各个需要打印的边存下来,如果最后有解就顺序输出即可,这样就节省了不少的时间。#include<stdi 阅读全文
posted @ 2011-10-08 16:06 Staginner 阅读(348) 评论(0) 推荐(0) 编辑
摘要: CF 118C 这个题目可以暴力枚举变成0~9的情况,但究竟优先变哪一个位置需要分情况进行讨论,因此可以先按优先级将位置进行排序,依次改变该位置上的数字即可。#include<stdio.h>#include<string.h>#include<stdlib.h>int number, a[10010], b[11][10010], sum[11], r[10010];char str[10010];int cmp(const void *_p, const void *_q){ int *p = (int *)_p; int *q = (int *)_q; 阅读全文
posted @ 2011-10-08 16:05 Staginner 阅读(398) 评论(0) 推荐(0) 编辑