2017湖南大学ACM程序设计新生杯大赛 - B - Build (并查集&&贪心)
2018-01-21 22:36
281 查看
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> using namespace std; const int N = 1e6 + 10; int n,m,q,k; int fa ,ans ; struct node{ int u,v,cost; }e ; bool cmp(node a,node b){ return a.cost<b.cost; } int find(int x){ int be = x; while(fa[x]!=x) x = fa[x]; while(fa[be]!=be){ int t = fa[be]; fa[be] = x; be = t; } return x; } int cnt ,now = 1; void slove(){ sort(e,e+m,cmp); for(int i=0;i<=n;i++) {fa[i] = i; cnt[i] = 1;} for(int i=0;i<m;i++){ if(e[i].cost>=N) break; while(e[i].cost>now){ ans[now+1] = ans[now]; now++; } int faa = find(e[i].u); int fbb = find(e[i].v); if(faa == fbb) continue; fa[fbb] = faa; ans[now] += cnt[faa]*cnt[fbb]; cnt[faa] += cnt[fbb]; } } int main() { scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].cost); } slove(); scanf("%d",&q); while(q--){ scanf("%d",&k); if(k>=1e6) k = 1e6; while(k>now){ ans[now+1] = ans[now]; now++; } printf("%d\n",ans[k]); } return 0; }
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> using namespace std; const int N = 1e6 + 10; int n,m,q,k,ans ; int fa ,cnt ; struct node{ int u,v,cost; }e ; struct node2{ int id,k; }sc ; bool cmp2(node2 a,node2 b){ return a.k<b.k; } bool cmp(node a,node b){ return a.cost<b.cost; } int find(int x){ int b = x; while(fa[x]!=x) x = fa[x]; while(fa[b]!=b){ int c = fa[b]; fa[b] = x; b = c; } return x; } void slove(){ sort(e,e+m,cmp); int now = 0; for(int i=1;i<=n;i++) {fa[i] = i;cnt[i] = 1;} for(int i=0;i<q;i++){ if(i) ans[sc[i].id] = ans[sc[i-1].id]; while(now<m&&sc[i].k>=e[now].cost){ int faa = find(e[now].u); int fbb = find(e[now].v); now++; if(faa == fbb) continue; ans[sc[i].id] += cnt[faa] * cnt[fbb]; cnt[faa] += cnt[fbb]; fa[fbb] = faa; } } } int main() { scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].cost); } scanf("%d",&q); for(int i=0;i<q;i++){ scanf("%d",&sc[i].k); sc[i].id = i; } sort(sc,sc+q,cmp2); slove(); for(int i=0;i<q;i++){ printf("%d\n",ans[i]); } return 0; }
相关文章推荐
- 湖南大学ACM程序设计新生杯大赛(同步赛)B - Build
- hdu6237-2017哈尔滨CCPC-质因子&贪心&暴力-A Simple Stone Game
- 湖南大学ACM程序设计新生杯大赛(同步赛)C-Do you like Banana ? 【几何】
- HDU6098-2017多校6-贪心&水-Inversion
- hdu6047-贪心&思维-2017多校(2)-Maximum Sequence
- 湖南大学ACM程序设计新生杯大赛(同步赛) D -Number 【打表+暴力】
- 2017 Multi-University Training Contest 10 1010 Schedule && HDU 6180 (贪心)
- 湖南大学ACM程序设计新生杯大赛(同步赛)E-Permutation【打表+规律】
- 2017 Multi-University Training Contest 10 1008 Monkeys&& HDU 6178 (贪心+超级读入挂fread)
- 湖南大学ACM程序设计新生杯大赛(C-Do you like banana?)
- 2017 Multi-University Training Contest 1 && HDOJ 6034 Balala Power! 【贪心】
- ICPC2017南宁邀请赛1004&&HDU6197 (贪心
- 2017 Multi-University Training Contest 10 && HDU 6178 Monkeys 【贪心||树形DP】
- 湖南大学ACM程序设计新生杯大赛(同步赛)G-The heap of socks【排序】
- 湖南大学ACM程序设计新生杯大赛(同步赛)C - Do you like Banana ?
- 2017 Multi-University Training Contest 7 && HDU 6121 Build a tree 【思维】
- 2017 CCPC 秦皇岛 & ZOJ 3987 - Numbers (贪心+大数)
- 湖南大学ACM程序设计新生杯大赛(同步赛)H-Yuanyuan Long and His Ballons【公式】
- 湖南大学ACM程序设计新生杯大赛(同步赛)G - The heap of socks
- 湖南大学ACM程序设计新生杯大赛(同步赛)J - Piglet treasure hunt Series 2