摘要: 简单题,但容易超时,不要每次memset,而是记录b数组那些位被修改过,记录在set中,然后每次把set中在b里的对应位改回0即可。View Code #include <stdio.h>#define maxn 305#define maxx 1000005int n, f[maxn], tot, set[maxn];int b[maxx];void input(){ int i; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &f[i]);}void cov 阅读全文
posted @ 2011-05-01 19:16 金海峰 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 强连通分支+拓扑排序 求强连通分支有两种方法,korasaju和tarjan。 korasaju是进行两次dfs覆盖全图(实际上是两种dfs,覆盖全图需要多次dfs),第一次给结点标起始和结束时间,第二次把图反向并从结束时间最大的结点开始dfs,每次dfs所能到达的结点为一个强连通分支。下面来简单讲 阅读全文
posted @ 2011-05-01 16:40 金海峰 阅读(1353) 评论(1) 推荐(1) 编辑
摘要: 简单题View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;#define eps 1.0e-8int work(double a, double b, double c, double d){ int ret = 0; while (c > a + eps) { ret++; c /= 2; } while (d > b + eps) { ret++; d /= 2; } return 阅读全文
posted @ 2011-05-01 12:46 金海峰 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 简单题View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int l, m; while (scanf("%d%d", &l, &m) != EOF && !(l == 0 && m == 0)) 阅读全文
posted @ 2011-05-01 12:29 金海峰 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 不高兴的津津……View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int n; while (scanf("%d", &n) != EOF && n != 0) { int ans = 0; int maxhour = 阅读全文
posted @ 2011-05-01 12:17 金海峰 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 简单题View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int sum = 0; 阅读全文
posted @ 2011-05-01 12:10 金海峰 阅读(235) 评论(0) 推荐(0) 编辑