Pagini recente » Cod sursa (job #1227645) | Cod sursa (job #1148047) | Cod sursa (job #1906232) | Cod sursa (job #2493460) | Cod sursa (job #868944)
Cod sursa(job #868944)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 200
#define MODULO 98999
static int s[N + 1][N + 1], S[N + 1][N + 1];
int sitrling_main() {
freopen("stirling.in", "r", stdin);
freopen("stirling.out", "w", stdout);
memset(s, 0, sizeof(s));
memset(S, 0, sizeof(S));
s[1][1] = 1;
S[1][1] = 1;
int i, j;
for (i = 2; i <= N; i++) {
for (j = 1; j <= i; j++) {
s[i][j] = (s[i - 1][j - 1] - (i - 1) * s[i - 1][j]) % MODULO;
S[i][j] = (S[i - 1][j - 1] + j * S[i - 1][j]) % MODULO;
}
}
int T;
scanf("%d\n", &T);
for (i = 0; i < T; i++) {
int x, n, m;
scanf("%d %d %d\n", &x, &n, &m);
if (x == 1) {
printf("%d\n", s[n][m]);
}
else if (x == 2) {
printf("%d\n", S[n][m]);
}
}
return 0;
}
typedef struct uf_node_ {
int rank;
struct uf_node_ *parent;
} uf_node;
uf_node *new_node() {
uf_node *node = (uf_node *) malloc(sizeof(uf_node));
node->rank = 0;
node->parent = node;
return node;
}
uf_node *data[100001];
void do_union(int x, int y) {
uf_node *nx = data[x];
while (nx != nx->parent) nx = nx->parent;
uf_node *ny = data[y];
while (ny != ny->parent) ny = ny->parent;
if (nx->rank < ny->rank) {
nx->parent = ny;
ny->rank++;
}
else {
ny->parent = nx;
nx->rank++;
}
}
int do_find(int x, int y) {
uf_node *nx = data[x];
while (nx != nx->parent) nx = nx->parent;
uf_node *ny = data[y];
while (ny != ny->parent) ny = ny->parent;
return nx == ny;
}
int union_find_main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m, i;
int cod, x, y;
scanf("%d %d\n", &n, &m);
for (i = 1; i <= n; i++) {
data[i] = new_node();
}
for (i = 1; i <= m; i++) {
scanf("%d %d %d\n", &cod, &x, &y);
if (cod == 1) {
do_union(x, y);
}
else if (cod == 2) {
int result = do_find(x, y);
if (result)
printf("DA\n");
else
printf("NU\n");
}
}
return 0;
}
int main(int argc, char **argv) {
//return stirling_main();
return union_find_main();
}