- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
// #include<....>
using namespace std;
#if ( _WIN32 || __WIN32__ || _WIN64 || __WIN64__ )
#define I64 "%I64d"
#else
#define I64 "%Ld"
#endif
#define PB(x) push_back(x)
#define MP(x,y) make_pair(x,y)
#define dbg(x) cerr << #x << " = " << x << endl
#define fori(i,b,e) for(int i = (b); i < (e); i++)
#define forall(p,s) for(typeof((s).begin()) p = (s).begin(); p != (s).end(); p++)
#define memclr(a) memset((a), 0, sizeof(a))
typedef long long int64;
const long long inf = ((long long)1 << 63) - 1;
#define PROBLEM_NAME "a"
#define add(i, j, val, p, ch) \
do { \
par[i][j][val] = p; \
c[i][j][val] = ch; \
was[i][j][val] = true; \
d[i][j][val] = d[i][j][p] + 1; \
a[i][j][sz[i][j]++] = val; \
} while (0)
void bfs(int n) {
int p[10][10][2];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
p[i][j][0] = min(i,j);
p[i][j][1] = max(i,j);
}
}
static int par[10][10][2 << 16];
static int c[10][10][2 << 16];
static bool was[10][10][2 << 16];
static int a[10][10][2 << 16];
static int d[10][10][2 << 16];
static int sz[10][10];
static int cur[10][10];
//...
}
int main() {
//...
}
Часть шаблона, ну еще кое-какие макросы, т.к. влом было писать нормально. Зато работало. bfs не обыкновенный, если кого это смутит.