hdu4750Count The Pairs 并查集
来源:互联网 发布:问答软件名字 编辑:程序博客网 时间:2024/04/20 00:38
//给出n个点,m条边的无向图//对于一个给定的t//找出有多少对(s,t)使得从s到t的所有路线中//这些路线中权值最大得最小值小于等于t即可以//将边以权值从小到大排序//将询问以t从小到大排序//对于每一次加上一条边,如果将两个集合连接//那么可以将上的pair<s,t>为 (ss[fx]*ss[fy])*2个//再要询问值小于这个值的所有询问都加上(ss[fx]*ss[fy])*2//可以用并查集维护集合#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std ;const int maxn = 1e4+10 ;const int maxm = 5e5+10 ;const int maxq = 1e5+10 ;struct node{ int u , v , w ; bool operator < (struct node tmp)const { return w < tmp.w ; }}edge[maxm] ;int F[maxn] ;int ss[maxn] ;int ans[maxq] ;struct Query{ int v ; int id ; int sum ; bool operator < (const struct Query tmp)const { return v < tmp.v ; }}q[maxq] ;int find(int x){ if(F[x] == -1) return x ; return F[x] = find(F[x]) ;}int join(int x , int y){ int fx = find(x) ; int fy = find(y) ; if(fx == fy)return 0 ; int sum = (ss[fx]*ss[fy])*2 ; F[fx] = fy ; ss[fy] += ss[fx] ; return sum ;}int find_pos(int l , int r , int v){ while(l<=r) { int mid = (l + r) >> 1 ; if(q[mid].v <= v) l = mid + 1 ; else r = mid - 1; } return r ;}int main(){ //freopen("in.txt" , "r" , stdin) ; int n , m ; while(~scanf("%d%d" , &n , &m)) { memset(F , -1 , sizeof(F)) ; for(int i = 0;i <= n;i++) ss[i] = 1 ; for(int i = 1;i <= m;i++) scanf("%d%d%d" , &edge[i].u , &edge[i].v , &edge[i].w) ; sort(edge+1 , edge+1+m) ; int Q ; scanf("%d" , &Q) ; for(int i = 1;i <= Q;i++) scanf("%d" , &q[i].v) , q[i].id = i ,q[i].sum = 0 ; sort(q + 1 ,q + 1+ Q) ; for(int i = 1;i <= m;i++) { int pos = find_pos(1 , Q , edge[i].w) ; int sum = join(edge[i].u , edge[i].v ); q[1].sum += sum ; q[pos+1].sum -= sum ; } for(int i = 1;i <= Q;i++) q[i].sum += q[i-1].sum , ans[q[i].id] = q[i].sum ; for(int i = 1;i <= Q;i++) printf("%d\n", ans[i]) ; } return 0 ;}
0 0
- hdu4750Count The Pairs 并查集
- hdu 4750 Count The Pairs 并查集+离线
- HDOJ 4750 - Count The Pairs 并查集
- 并查集+二分-hdu-4750-Count The Pairs
- hdu 4750 Count The Pairs (思维+并查集+离散化+二分查找)
- hdu 4750 Count The Pairs(2013南京网络赛C题,并查集)
- hdu4750 Count The Pairs(并查集+二分+最小生成树思想)
- hdu 4750 Count The Pairs 并查集+递推(2013 ACM/ICPC Asia Regional Nanjing Online 1003)
- hdu 4750 Count The Pairs 并查集+递推(2013 ACM/ICPC Asia Regional Nanjing Online 1003)
- hdu 4750 Count The Pairs 并查集+二分+递推(2013 ACM/ICPC Asia Regional Nanjing Online 1003)
- The Suspects 并查集
- The Suspects(并查集)
- 并查集 The Suspects
- The Suspects 并查集
- 并查集 - The Suspects
- The Suspects(并查集)
- 并查集----The Suspects
- The Suspects 并查集
- 对象与继承
- 天涯明月刀 题八
- HDU 4436 str2int
- 第6周项目3-括号的匹配
- X210烧写linux系统
- hdu4750Count The Pairs 并查集
- xUtils 源码解析
- HDU 4433 locker
- Letter Combinations of a Phone Number
- igrimaceV8.0.0 IG (三个插件安装方式)
- 达内学习日志Day20:Java核心API(Map初体验)
- Linux网络编程---ICMP协议分析及ping程序实现
- 数组中未出现的最小正整数
- 二级指针