int main(void) { int a,b,d1,d2,p1=0,p2=0; scanf("%d%d%d%d",&a,&d1,&b,&d2); p1 = findp(a,d1); p2 = findp(b,d2); printf("%d\n",p1+p2); }
void joint(int x, int y) { x = findp(x), y = findp(y); if (x == y) return; if (weight[x] > weight[y]) { parent[y] = x, weight[x] += weight[y]; tree.merge(root[y], root[x]); } else { parent[x] = y, weight[y] += weight[x]; tree.merge(root[x], root[y]); } }
static void test(){ char data[] ="$GPGSA,M,3,17,02,30,04,05,10,09,06,31,12,,,1.2,0.8,0.9*2B"; char *p = data,*pb; int i,j = 0,chesum,prn[12]; float pdop,hdop,vdop; #if 0 p = data; pb = strchr(p,','); *pb = '\0'; #endif if(findp(&p,',') > 0) printf("\ngps:%s",p); #if 0 p = pb+1; pb = strchr(p,','); *pb = '\0'; printf("\nM:%s",p); p = strchr(p+1,','); *p = '\0'; printf("%s",p); #endif #if 0 getp = strtok(p,","); if((i = strcmp("$GPGSA",getp)) != 0) return -1; getp = strtok(NULL,","); printf("\nM:%s",getp); getp = strtok(NULL,","); printf("\node:%s",getp); printf("\nprn:"); for(i = 0;i < 12;i++) if((getp = strtok(NULL,",")) != ""){ printf("%s ",getp); prn[j++] = atoi(getp); } getp = strtok(NULL,","); printf("\npdop:",getp); pdop = atof(strtok(NULL,",")); hdop = atof(strtok(NULL,",")); vdop = atof(strtok(NULL,"*")); chesum = atoi(p); printf("\npdop:%f hdop:%f vdop:%f",pdop,hdop,vdop); printf("%d ",chesum); getp = strtok(p,","); printf("\ngpgsa: %s",getp); printf("\ni:%d",i); #endif }
int main() { char line[33]; char qipan[8][8]; int first, second; int fin, sin; olen = 0; fin = 0; for(first=0; first<17; first++) { scanf("%s", line); if(first%2 == 0) continue; sin = 0; for(second=2; second<33; second+=4) { qipan[fin][sin++] = line[second]; } fin++; } #if DEBUG show(qipan, 8); #endif printf("White: "); find(qipan, 8, 'K'); find(qipan, 8, 'Q'); find(qipan, 8, 'R'); find(qipan, 8, 'B'); find(qipan, 8, 'N'); findp(qipan, 8, 'P'); output[strlen(output)-1] = '\0'; printf("%s\n", output); memset(output, 0, 500); printf("Black: "); Find(qipan, 8, 'k'); Find(qipan, 8, 'q'); Find(qipan, 8, 'r'); Find(qipan, 8, 'b'); Find(qipan, 8, 'n'); Findp(qipan, 8, 'p'); output[strlen(output)-1] = '\0'; printf("%s\n", output); return 0; }
int main() { // freopen("in.txt", "r+t", stdin); // freopen("out.txt", "w+t", stdout); int n, m, q, t; int cases = 0; while (scanf("%d %d", &n, &m) == 2 && n) { tree.init(); for (int i = 1; i <= n; i++) scanf("%d", &w[i]); for (int i = 1; i <= m; i++) scanf("%d %d", &edgeX[i], &edgeY[i]); int exists[MAXM] = {}; for (int i = 1; i <= m; i++) exists[i] = 1; for (q = 0; scanf("%s", cmd[q]) == 1 && cmd[q][0] != 'E'; q++) { if (cmd[q][0] == 'D') scanf("%d", &QX[q]), exists[QX[q]] = 0; else if (cmd[q][0] == 'C') scanf("%d %d", &QX[q], &QY[q]), t = QY[q], QY[q] = w[QX[q]], w[QX[q]] = t; else if (cmd[q][0] == 'Q') scanf("%d %d", &QX[q], &QY[q]); } for (int i = 1; i <= n; i++) root[i] = null; for (int i = 1; i <= n; i++) tree.insert(root[i], w[i]); initDisjointSet(n); for (int i = 1; i <= m; i++) if (exists[i] == 1) joint(edgeX[i], edgeY[i]); double ret = 0, cnt = 0; for (int i = q - 1; i >= 0; i--) { if (cmd[i][0] == 'D') joint(edgeX[QX[i]], edgeY[QX[i]]); else if (cmd[i][0] == 'C') changeVertex(QX[i], QY[i]); else if (cmd[i][0] == 'Q') { cnt++; node* v = tree.rkth_element(root[findp(QX[i])], QY[i]); if (v == null) /*puts("undefined")*/; else ret += v->key/*, printf("kth %d\n", v->key)*/; } } ret /= cnt; printf("Case %d: %lf\n", ++cases, ret); } return 0; }
int main(void) { int head, tail; Big max; Divisor prime[MAXP]; findp(prime); scanf("%*d"); while (scanf("%d %d", &head, &tail) == 2) { max = maxn(prime, head, tail); printf("Between %d and %d, %d has a maximum of %d divisors.\n" , head, tail, max.number, max.sum); } return 0; }
// haystack: original string, needle: pattern // both start from index 0 char* kmp(char *haystack, char* needle) { char* s = haystack, *p = needle; int n = strlen(s); int m = strlen(p); vector<int> pre; findp(p, pre); int j = -1; for (int i = 0; i < n; ++i) { while (j != -1 && s[i] != p[j + 1]) { j = pre[j]; } if (s[i] == p[j + 1]) { ++j; } if (j == m - 1) { // find the answer return haystack + (i - j); } } return nullptr; }
void changeVertex(int u, int val) { int r = findp(u); tree.remove(root[r], w[u]); tree.insert(root[r], val); w[u] = val; }
int findp(int x) { return parent[x] == x ? x : (parent[x] = findp(parent[x])); }