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 |
蒟蒻求助。。。TLE快要吐了。。。这道题要卡常数吗?//这道题要卡常数吗? //大佬们请留步,谢谢 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN = 10000; const int MAXE = 50000; struct Edge { int u; int v; int val; }; struct Edge g[MAXE+2]; int fa[2*MAXN+2]; int n,m,e; int ans; void cases(); int find_fa(int); void union_fa(int,int); bool cmp(struct Edge,struct Edge); int Kruskal(); int main() { int t; scanf("%d",&t); while(t--) { cases(); } return 0; } void cases() { int i,x,y,z; scanf("%d%d%d",&n,&m,&e); for(i=0; i<e; i++) { scanf("%d%d%d",&x,&y,&z); g[i].u = x; g[i].v = y+n; g[i].val = z; } ans = Kruskal(); ans = 10000*(n+m)-ans; printf("%d\n",ans); } int find_fa(int m) { int i,j,k; i = m; while(fa[i] != i) { i = fa[i]; } j = i; while(i != j) { i = fa[k]; fa[k] = j; k = i; } return j; } void union_fa(int m,int n) { int p,q; p = find_fa(n); q = find_fa(m); if(fa[p] != q) { fa[p] = q; } } bool cmp(struct Edge x,struct Edge y) { return x.val>y.val; } void Kruskal_UFSreset() { int i; for(i=0; i<=MAXN*2; i++) { fa[i] = i; } } int Kruskal() { int i,ans,p,q; Kruskal_UFSreset(); sort(g,g+e,cmp); ans = 0; for(i=0; i<e; i++) { p = find_fa(g[i].u); q = find_fa(g[i].v); if(p != q) { ans+=g[i].val; union_fa(p,q); } } return ans; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator