hdu 5441
来源:互联网 发布:java加载配置文件 编辑:程序博客网 时间:2024/06/10 02:38
#include <iostream>#include <string.h>#include <set>#include <cstdio>#include <algorithm>#define ll long long#define N 20005#define M 100005using namespace std;int father[N];int find(int x){ if (father[x]!=x) return father[x]=find(father[x]); else return x;}ll ans[5005],num[N];void join(int x,int y){ int fx = find(x),fy = find(y); if(fx!=fy) father[fx] = fy;}ll Union(int x,int y){ int rx,ry; rx = find(x); ry = find(y); if (rx==ry) return 0; father[rx] = ry; ll res=num[ry]*num[rx]*2; num[ry]+=num[rx]; return res;}struct Limit{ int num,cnt;}limit[5005];bool cmp(Limit a,Limit b){ return a.num<b.num;}struct Edge{ int u,v,value;}edge[M];bool cmp_edge(Edge a, Edge b){ return a.value<b.value;}int n,m,q;int main(){ int T; scanf("%d",&T); while (T--) { scanf("%d%d%d",&n,&m,&q); for (int i=1;i<=n;i++) { father[i]=i; num[i]=1; } for (int i=1;i<=m;i++) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].value); for (int i=1;i<=q;i++) { scanf("%d",&limit[i].num); limit[i].cnt=i; } sort(edge+1,edge+m+1,cmp_edge); sort(limit+1,limit+q+1,cmp); ll res=0; int j=1; for (int i=1;i<=q;i++) { while (edge[j].value<=limit[i].num && j<=m ) { int u=edge[j].u; int v=edge[j].v; res+=Union(u,v); j++; } ans[limit[i].cnt]=res; } for (int i=1;i<=q;i++) printf("%lld\n",ans[i]); } return 0;}
0 0
- hdu 5441
- HDU 5441
- HDU 5441
- hdu 5441
- HDU-5441 Travel
- hdu 5441 Travel
- HDU 5441 Travel
- HDU 5441Travel
- 【HDU 5441】Travel
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- vue-lazyload基础实例(基于vue2.0和vue-router2.0)
- hdu 5492
- 把base64图片数据转为本地图片的函数
- java编程思想读书笔记
- linux无法发送邮件
- hdu 5441
- 3.20
- 百度UEditor富文本编辑器-设置默认字体、字号、行间距及添加字体种类
- Ubuntu
- Java多线程系列--“基础篇”04之 synchronized关键字
- L3-010. 是否完全二叉搜索树
- mysql查询执行过程
- 土巴兔CEO王国彬:这五点,决定了你事业的上限
- usaco2017febgold总结