标签:
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 2055 Accepted Submission(s): 709
#include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> #include <ctime> #include <cmath> #include <string> #include <cstring> #include <stack> #include <queue> #include <list> #include <vector> #include <map> #include <set> using namespace std; const int INF=0x3f3f3f3f; const double eps=1e-10; const double PI=acos(-1.0); #define maxn 5500 #define maxx 26000 #define maxm 160000 struct Edge { int u,v,w; }edge[maxm]; struct Id { int s, id; }ans[maxn]; int n,cnt1; int root[maxx],num[maxx],cnt[maxn]; int vis[maxx]; int cmp(Edge a,Edge b) { return a.w < b.w; } int cmp1(Id a, Id b) { return a.s < b.s; } int cmp2(Id a, Id b) { return a.id < b.id; } void init() { for(int i = 1; i <= n; i++) { root[i] = i; num[i] = 1; } } int find_root(int x) { if(x != root[x]) root[x] = find_root(root[x]); return root[x]; } int cot; void uni(int a, int b) { int x = find_root(a); int y = find_root(b); if(x != y) { root[y] = x; int p1 = num[x]; int p2 = num[y]; cot -= p1*(p1-1); cot -= p2*(p2-1); num[x] += num[y]; cot += num[x] * (num[x]-1); num[y] = 0; } } int main() { int t; scanf("%d", &t); while(t--) { int m,q; scanf("%d%d%d", &n, &m, &q); for(int i = 0; i < m; i++) scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w); init(); sort(edge, edge+m, cmp); for(int i = 0; i < q; i++) { scanf("%d", &ans[i].s); ans[i].id = i; } sort(ans, ans+q, cmp1); memset(vis, 0, sizeof vis); cnt1 = 0; int cnt2 = 0; cot = 0; //memset(cnt, 0, sizeof cnt); for(int i = 0; i < m; i++) { if(cnt2 == q) break; // if(edge[i].w <= ans[cnt2].s) // uni(edge[i].u, edge[i].v); // else for(int j = cnt2; cnt2 < q; cnt2++) { if(edge[i].w <= ans[cnt2].s) { uni(edge[i].u, edge[i].v); break; } ans[cnt2].s = cot; } } int temp; if(cnt2 == 0) temp = cot; else temp = ans[cnt2-1].s; if(cnt2<q) for(int i = cnt2; i < q; i++) ans[i].s = temp; sort(ans, ans+q, cmp2); for(int i = 0; i < q; i++) printf("%d\n", ans[i].s); } return 0; }
标签:
原文地址:http://www.cnblogs.com/ZP-Better/p/4835956.html