HDU 3938 并查集

求小于L的路径点对数(路上的最大值),按权值排序,从小到大并查集建图,有点kruskal的意思。

/** @Date    : 2017-09-22 17:30:11
  * @FileName: HDU 3938 并查集 离线.cpp
  * @Platform: Windows
  * @Author  : Lweleth ([email protected])
  * @Link    : https://github.com/
  * @Version : $Id$
  */
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 1e4+20;
const double eps = 1e-8;

int n, m, q;
struct yuu{
	int a, b;
	int l;
}e[N*5];

struct sion{
	int m, l;
}qu[N];

int cmp1(yuu a, yuu b)
{
	return a.l < b.l;
}

int cmp2(sion a, sion b)
{
	return a.l < b.l;
}

int fa[N];
LL cnt[N];
LL ans[N];

int find(int x)
{
	if(x != fa[x])
		fa[x] = find(fa[x]);
	return fa[x];
}

int join(int a, int b)
{
	int x = find(a);
	int y = find(b);
	int t = 0;
	if(x != y)
	{
		t = cnt[x] * cnt[y];
		fa[y] = x;
		cnt[x] += cnt[y];
		cnt[y] = 0;
		return t;
	}
	return 0;
}

int main()
{

	while(~scanf("%d%d%d", &n, &m, &q))
	{
		MMF(ans);
		MMF(cnt);

		for(int i = 0; i <= n; i++)
			fa[i] = i, cnt[i] = 1;
		for(int i = 0; i < m; i++)
			scanf("%d%d%d", &e[i].a, &e[i].b, &e[i].l);
		for(int i = 0; i < q; i++)
			scanf("%d", &qu[i].l), qu[i].m = i;
		sort(e, e + m, cmp1);
		sort(qu, qu + q, cmp2);
		int j = 0;
		LL t = 0;
		for(int i = 0; i < q; i++)
		{
			while(j < m && e[j].l <= qu[i].l)
				t += join(e[j].a, e[j].b), j++;
			ans[qu[i].m] = t;
		}
		//cout << "~";
		for(int i = 0; i < q; i++)
			printf("%lld\n", ans[i]);
	}
    return 0;
}
时间: 2024-10-05 23:52:46

HDU 3938 并查集的相关文章

HDU 1051 并查集+贪心

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11694    Accepted Submission(s): 4837 Problem Description There is a pile of n wooden sticks. The length and weight of each stick ar

HDU 1512 并查集+左偏树

Monkey King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3105    Accepted Submission(s): 1330 Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they e

hdu 1829 并查集(食物链的弱化版)

http://acm.hdu.edu.cn/showproblem.php?pid=1829 Problem Description Background  Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of

hdu 4514 并查集+树形dp

湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 4539    Accepted Submission(s): 816 Problem Description 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,

hdu 1856 并查集

http://acm.hdu.edu.cn/showproblem.php?pid=1856 More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 13672    Accepted Submission(s): 5008 Problem Description Mr Wang wants some boys

HDU 1181 并查集 or SPFA

变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 12773    Accepted Submission(s): 4733 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规

hdu 1213 并查集入门

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12538    Accepted Submission(s): 6145 Problem Description Today is Ignatius' b

HDU 1829 并查集

A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8224    Accepted Submission(s): 2631 Problem Description Background Professor Hopper is researching the sexual behavior of a rare sp

hdu 1213 并查集 水

http://acm.hdu.edu.cn/showproblem.php?pid=1213 做到一道网赛题 2-sat可写 貌似并查集也可写  但是并查集做法没想到 先水几道并查集重新理解下然后再去做 学到的就一点  Father数组中有些值一直保持最初的father[x] == x  最终集合的个数可以通过这个判断 #include <cstdio> #include <cstring> #include <algorithm> #include <iostr