zoukankan      html  css  js  c++  java
  • A1114 Family Property [并查集]

    在这里插入图片描述
    唉 自己没想出来 二刷再来看吧

    #include<iostream>
    #include<vector>
    #include<map>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct Data
    {
    	int id, fid, mid, estate, area;
    	int cid[10];
    }dt[1005];
    struct node
    {
    	int id, people;
    	double estate, area;
    	bool flag = false;
    }ans[10000];
    int father[10000];
    bool visit[10000];
    int find(int x)
    {
    	while (x != father[x])
    		x = father[x];
    	return x;
    }
    
    void Union(int a, int b)
    {
    	int faA = find(a);
    	int faB = find(b);
    	if (faA > faB)
    		father[faA] = faB;
    	else if (faA < faB)
    		father[faB] = faA;
    }
    
    int cmp(node a, node b)
    {
    	if (a.area != b.area)
    		return a.area > b.area;
    	else
    		return a.id < b.id;
    }
    
    int main()
    {
    	int n, k, cnt = 0;
    	cin >> n;
    	for (int i = 0; i < 10000; i++)
    		father[i] = i;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> dt[i].id >> dt[i].fid >> dt[i].mid >> k;
    		visit[dt[i].id] = true;
    		if (dt[i].fid != -1)
    		{
    			visit[dt[i].fid] = true;
    			Union(dt[i].fid, dt[i].id);
    		}
    		if (dt[i].mid != -1)
    		{
    			visit[dt[i].mid] = true;
    			Union(dt[i].mid, dt[i].id);
    		}
    		for (int j = 0; j < k; j++)
    		{
    			cin >> dt[i].cid[j];
    			visit[dt[i].cid[j]] = true;
    			Union(dt[i].cid[j], dt[i].id);
    		}
    		cin >> dt[i].estate>> dt[i].area;
    	}
    	for (int i = 0; i < n; i++)
    	{
    		int id = find(dt[i].id);
    		ans[id].id = id;
    		ans[id].estate += dt[i].estate;
    		ans[id].area += dt[i].area;
    		ans[id].flag = true;
    	}
    	
    	for (int i = 0; i < 10000; i++)
    	{
    		if(visit[i])
    			ans[find(i)].people++;
    		if (ans[i].flag)
    			cnt++;
    	}
    	for (int i = 0; i < 10000; i++)
    	{
    		if (ans[i].flag)
    		{
    			ans[i].estate = ans[i].estate / ans[i].people;
    			ans[i].area = ans[i].area / ans[i].people;
    		}
    	}
    	sort(ans, ans + 10000, cmp);
    	printf("%d
    ", cnt);
    	for (int i = 0; i < cnt; i++)
    		printf("%04d %d %.3f %.3f
    ", ans[i].id, ans[i].people, ans[i].estate, ans[i].area);
    	return 0;
    
    }
    
  • 相关阅读:
    11个有用的移动网页开发App和HTML5框架
    移动平台前端开发总结(针对iphone,Android等手机)
    uploadify按钮中文乱码问题
    @page指令 validateRequest的作用
    C#,.net获取字符串中指定字符串的个数、所在位置与替换字符串
    lambda函数
    主函数
    Python函数
    猴子
    旋转
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811975.html
Copyright © 2011-2022 走看看