hdu 5441 并查集+排序
来源:互联网 发布:简述算法的复杂度分析 编辑:程序博客网 时间:2024/04/30 22:57
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;const int maxm=1e5+5;const int maxn=2*1e4+5;const int maxq=5*1e3+5;struct edge{int from,to,cost;}e[maxm];struct node{int num,time,res;}tp[maxq];int par[maxn],cnt,cnt1,n,m,q,j,num[maxn];bool cmp(edge a,edge b){ if(a.cost==b.cost) { if(a.from==b.from) return a.to<b.to; return a.from<b.from; } return a.cost<b.cost;}bool comp(node a,node b){ if(a.time==b.time) return a.num<b.num; return a.time<b.time;}bool cmop(node a,node b){ return a.num<b.num;}int find(int num){ if(par[num]==num) return num; return par[num]=find(par[num]);}void init(){ j=0; cnt=0; for(int i=0;i<=n;i++) { num[i]=1; par[i]=i; }}int main(){ int t,i; scanf("%d",&t); while(t--&&scanf("%d%d%d",&n,&m,&q)!=EOF) { init(); for(i=0;i<m;i++) scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].cost); sort(e,e+m,cmp); for(i=0;i<q;i++) { scanf("%d",&tp[i].time); tp[i].num=i; } sort(tp,tp+q,comp); for(i=0;i<q;i++) { for(;(e[j].cost<=tp[i].time)&&j<m;j++) { int fa=find(e[j].from),fb=find(e[j].to); if(fa!=fb) { cnt+=num[fa]*num[fb];//这里最好玩 par[fa]=fb; num[fb]+=num[fa]; } } tp[i].res=cnt*2; } sort(tp,tp+q,cmop); for(i=0;i<q;i++) printf("%d\n",tp[i].res); } return 0;}
0 0
- hdu 5441 Travel 排序 并查集
- hdu 5441 并查集+排序
- hdu 1811 并查集 + 拓扑排序
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序,查并集
- hdu 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu 1811(拓扑排序+并查集)
- hdu 1811 并查集+拓扑排序
- hdu--1811(拓扑排序+并查集)
- hdu 拓扑排序+并查集
- hdu 5441 (并查集)
- HDU 5441 并查集
- HDU 5441--并查集
- hdu 1811 rank of tetras 拓扑排序+并查集
- 计算器之如何解决运算符优先级问题
- 栈的C语言基本操作
- 正则表达式高级用法---五(反向引用 /1, /2...)
- Java4Android学习笔记26-27
- Java注解
- hdu 5441 并查集+排序
- apk文件反编译dex2jar.bat遇到的问题
- 最短路径基本介绍(2)--Dijkstra算法(单源最短路径算法)
- 算法学习--4 设置一个有getMin功能的栈之栈的升级版(待修改)
- uva1347 Tour
- js的事件
- 【寒江雪】BMP位图文件格式分析
- Scala DataFrame生成技巧
- NetRiver - 滑动窗口协议实验