void Solve::solve(FILE *fin, FILE *fout) { fscanf(fin, "%d%d%d", &nVtx, &nEdge, &nQuery); for(int i = 0; i < nVtx; i ++) mkset(i); for(int i = 0; i < nEdge; i ++) fscanf(fin, "%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w); std::sort(edge, edge + nEdge); for(int i = 0; i < nQuery; i ++) { query[i].idx = i; fscanf(fin, "%d", &query[i].val); } std::sort(query, query + nQuery); int edgeIt = 0; Val_t ansCnt = 0; for(int i = 0; i < nQuery; i ++) { while(edgeIt < nEdge && edge[edgeIt].w <= query[i].val) { int u = edge[edgeIt].u - 1, v = edge[edgeIt].v - 1; int p = findset(u); int q = findset(v); if(p != q) { ansCnt += cnt[p] * cnt[q]; mergeset(p, q); } edgeIt ++; } ans[query[i].idx] = ansCnt; } for(int i = 0; i < nQuery; i ++) fprintf(fout, VAL_T_FMT "\n", ans[i]); }
int N_insert_db(T_Connect *conn,char *tabname,void *data,T_PkgType *tp) { char stmt[32768]; char *p; T_CLI_Var *clip; clip=(T_CLI_Var *)conn->Var; p=stmt; p+=sprintf(p,"INSERT INTO "); if(*clip->DBOWN) p+=sprintf(p,"%s.",clip->DBOWN); p+=sprintf(p,"%s (",tabname); p=mkset(p,tp); p+=sprintf(p,") VALUES("); p=mk_values(p,data,tp); p+=sprintf(p,")"); return N_SQL_Exec(conn,stmt); }