HDU5441 Travel (2015年長春網路賽,並查集)
題目連結:傳送門
題意:
一個無向圖有n個節點m條邊,每條邊都有一個權值,然後有Q次詢問,每次詢問給定一個閥值,表示一個人從一個節點去另外一個節點經過的每條邊的權值都不能超過這個閥值,那麼這樣的節點對數有多少個,(u,v)與(v,u)看作不同的。
分析:
模擬貪心法求最小生成樹的過程,將所有的邊按權值從小到大排序,所有的詢問也按照閥值的從小到大排序,然後再邊權小於閥值的時候就不斷加邊,然後用並查集維護一下所有聯通快的數量,如果兩個聯通快互相不連通的話那麼當他們連起來的時候所做的貢獻為,他們相同後的點對數減去他們各自的點對數。
程式碼如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 2e4+10;
struct Edge{
int u,v,w;
bool operator <(const struct Edge &tmp)const{
return this->w<tmp.w;
}
}edg[maxn*5];
struct query{
int val,id;
bool operator <(const struct query &tmp)const{
return this->val<tmp.val;
}
}Q[maxn/4];
struct UFS{
int par[maxn],num[maxn];
void init(){
for(int i=0;i<maxn;i++){
par[i]=i;
num[i]=1;
}
}
int find_par(int x){
if(x!=par[x]) return par[x]=find_par(par[x]);
return par[x];
}
void Union(int x,int y,int &sum){
x=find_par(x);
y=find_par(y);
if(y<x) swap(x,y);
if(x!=y){
par[y]=x;
sum+=(num[x]+num[y])*(num[x]+num[y]-1) - num[x]*(num[x]-1) - num[y]*(num[y]-1);
num[x]+=num[y];
}
}
}T;
int ans[maxn/4];
int main()
{
int t,n,m,q;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
for(int i=0;i<m;i++){
scanf("%d%d%d",&edg[i].u,&edg[i].v,&edg[i].w);
}
sort(edg,edg+m);
for(int i=0;i<q;i++){
scanf("%d",&Q[i].val);
Q[i].id=i;
}
sort(Q,Q+q);
memset(ans,0,sizeof(ans));
T.init();
int sum=0;
for(int i=0,j=0;i<q;i++){
while(edg[j].w<=Q[i].val&&j<m){
T.Union(edg[j].u,edg[j].v,sum);
j++;
}
ans[Q[i].id]=sum;
}
for(int i=0;i<q;i++){
printf("%d\n",ans[i]);
}
}
return 0;
}
相關文章
- 並查集到帶權並查集並查集
- 查並集
- 【並查集】【帶偏移的並查集】食物鏈並查集
- 並查集(一)並查集的幾種實現並查集
- 3.1並查集並查集
- 並查集(小白)並查集
- [leetcode] 並查集(Ⅱ)LeetCode並查集
- [leetcode] 並查集(Ⅲ)LeetCode並查集
- [leetcode] 並查集(Ⅰ)LeetCode並查集
- 並查集 - 紅色警報 - 天梯賽 L2-013並查集
- 並查集系列之「路徑壓縮( path compression ) 」並查集路徑壓縮
- 淺談並查集並查集
- 食物鏈(並查集)並查集
- 並查集跳躍並查集
- 各種並查集並查集
- 寫模板, 並查集。並查集
- 並查集(Union Find)並查集
- The Door Problem 並查集並查集
- 並查集練習並查集
- 並查集應用並查集
- 並查集的使用並查集
- 並查集(二)並查集的演算法應用案例上並查集演算法
- 【並查集】一種與時間賽跑的巧妙演算法並查集演算法
- 並查集擴充套件並查集套件
- (Day3)並查集並查集
- 並查集java實現並查集Java
- 【轉】種類並查集並查集
- The Suspects-並查集(4)並查集
- 並查集-Java實現並查集Java
- 並查集演算法並查集演算法
- 並查集題目合集並查集
- 並查集深度應用並查集
- 中國國家鐵路集團:2020年春節鐵路春運首日售票超1200萬張 網路售票84.6%
- 簡單易懂的並查集演算法以及並查集實戰演練並查集演算法
- [複習] 種類並查集並查集
- 資料結構-並查集資料結構並查集
- 並查集の進階用法並查集
- 並查集(UnionFind)技巧總結並查集
- 關於並查集問題並查集