标签:
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2331 Accepted Submission(s): 804
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int t; int n,m,q; struct path { int s; int e; int dis; bool operator <(const path &x)const{ return dis<x.dis; } }P[100005]; struct limi { int id; int limit; bool operator <(const limi &x)const{ return limit<x.limit; } }L[100005]; __int64 re[5005]; int parent[20005]; int mp[20005]; int Find(int mubiao) { if(parent[mubiao]!=mubiao) parent[mubiao]=Find(parent[mubiao]); return parent[mubiao]; } void init() { for(int j=1;j<=n;j++) { parent[j]=j; mp[j]=1; } memset(re,0,sizeof(re)); } int main() { scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&q); for(int i=0;i<m;i++) scanf("%d%d%d",&P[i].s,&P[i].e,&P[i].dis); sort(P,P+m); for(int i=0;i<q;i++) { L[i].id=i; scanf("%d",&L[i].limit); } sort(L,L+q); init(); int gg=0; __int64 he=0; for(int i=0;i<q;i++) { while(gg<m&&L[i].limit>=P[gg].dis) { int ss=Find(P[gg].s); int ee=Find(P[gg].e); if(ss!=ee) { he+=mp[ss]*mp[ee]; parent[ee]=ss; mp[ss]+=mp[ee]; } gg++; } re[L[i].id]=he; } for(int i=0;i<q;i++) printf("%I64d\n",2*re[i]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/hsd-/p/4924673.html