Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
大侠解答下,通过了Sample output,为什么还是WA呢?#include <cstdlib> #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAX_R = 50000; int N, M, R; int x[MAX_R], y[MAX_R], d[MAX_R]; static int *id, *sz; void UFinit(int N) { int i; id = (int *)malloc(N * sizeof(int)); sz = (int *)malloc(N * sizeof(int)); for(i = 0; i < N; ++i) { id[i] = i; sz[i] = 1; } } static int find(int x) { int i = x; while (i != id[i]) i = id[i]; return i; } int UFfind(int p, int q) { return (find(p) == find(q)); } void UFunion(int p, int q) { int i = find(p), j = find(q); if (i == j) return; if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; } else { id [j] = i; sz[i] +=sz[j]; } } const int MAX_E = 50000; struct edge { int u, v, cost; edge(int uu = 0, int vv = 0, int cc = 20000) { u = uu; v = vv; cost == cc;} }; bool comp(const edge &e1, const edge &e2) { return e1.cost < e2.cost; } edge es[MAX_E]; int V, E; int kruskal() { sort(es, es + E, comp); UFinit(V); int res = 0; for(int i = 0; i < E && i < V - 1; ++i) { edge e = es[i]; if (!UFfind(e.u, e.v)) { UFunion(e.u, e.v); res += e.cost; } } free(id), free(sz); return res; } void solve() { V = N + M; E = R; for (int i = 0; i < R; ++i) { edge e; e.u = x[i]; e.v = N + y[i]; e.cost = -d[i]; es[i] = e; } printf("%d\n", 10000 * (N + M) + kruskal()); } int main(int argc, char *argv[]) { int T; scanf("%d", &T); for (int t = 0; t < T; ++t) { scanf("%d%d%d", &N, &M, &R); for(int r = 0; r < R; ++r) { scanf("%d%d%d", &x[r], &y[r], &d[r]); } solve(); } //system("PAUSE"); return EXIT_SUCCESS; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator