明天继续,立个flag,投入不到七小时就干脆别浪费这个时间了,哪怕是看ccpc直播也要凑够时间,否则退群该干啥干啥。
今天勉强算完成任务了,收工。虽然效率不算太高,而且学的东西比较杂,顺带着还补了下时间复杂度相关知识,竞赛知识介绍。不过初学阶段,可以理解。不能让人原谅的的是为什么这个时候了还是初学阶段,之前都干啥了?
算了,追究也没啥用处。
山理工教练的演讲对我还是感触比较大的。他们算山里人,我们怕是就是在山里种地的。说实话,我们学校这方面的实力还是差太多了。
暂时计划先放一下图论,补补前面的一些基本算法知识,然后多做点练习题。拓扑排序已基本初步掌握。
并查集这边学起来相对比较顺利,但是总做水题感觉也挺无聊的。
附上今天做的最后一题,难得一次AC,留作纪念(虽然debug的时候卡了测试样例)。不过这题目没有啥总结价值。
poj2236
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
const int MAXN = 1005;
int repaired[MAXN];
vector<int> connect[MAXN];
struct computer {
int x, y;
} c[MAXN];
int F[MAXN];
int n, d;
void init() {
memset(F, -1, sizeof(F));
memset(repaired, 0, sizeof(repaired));
for (int i = 0; i < MAXN; i++)
connect[i].clear();
}
void build_connect() {
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
int dis = (c[i].x - c[j].x) * (c[i].x - c[j].x) + (c[i].y - c[j].y) * (c[i].y - c[j].y);
if (dis <= d * d) {
connect[i].push_back(j);
connect[j].push_back(i);
}
}
}
}
int find(int x) {
int r = x;
while (F[r] != -1)
r = F[r];
int i = x, j;
while (i != r) {
j = F[i];
F[i] = r;
i = j;
}
return r;
}
void union_set(int x, int y) {
int u = find(x), v = find(y);
if (u != v) F[v] = u;
}
int main() {
#ifdef LOCAL
freopen("zz_in.txt", "r", stdin);
freopen("zz_op.txt", "w", stdout);
#endif
init();
scanf("%d %d", &n, &d);
for (int i = 1; i <= n; i++) {
scanf("%d %d", &c[i].x, &c[i].y);
}
build_connect();
char flag;
int p, q;
getchar();
while (~scanf("%c", &flag)) {
// cout << flag << endl;
if (flag == 'O') {
scanf("%d", &p);
repaired[p] = 1;
for (int i = 0; i < connect[p].size(); i++) {
if (repaired[connect[p][i]]) union_set(p, connect[p][i]); //connect[p][i]写成了i
// union_set(p, i);
}
}
if (flag == 'S') {
scanf("%d %d", &p, &q);
if (repaired[p] && repaired[q] && find(p) == find(q)) {
printf("SUCCESS\n");
} else {
// cout << find(p) << " " << find(q);
printf("FAIL\n");
}
}
getchar();
}
#ifdef LOCAL
printf("Time used = %.2f\n", (double) clock() / CLOCKS_PER_SEC);
#endif
return 0;
}